您的位置:首页 > 编程语言 > C语言/C++

PAT甲级 1122Hamiltonian Cycle C++

2020-06-24 04:26 603 查看

1122 Hamiltonian Cycle (25分)

题目意思大概是找到一个包含了图中所有顶点的简单的环路。

tips:

  1. 只有一条环路
  2. 必须包含所有顶点

我是直接按照输入样例,一步一步来测试是否符合条件。

可能有点暴力,但还是AK啦

#include<iostream>                  //输入输出流头文件
using namespace std;                //标准命名空间
int a[201][201]={-1};
void createMaxtrix(int m);
void judgeHC(int N,int n);
int main(){                         //主函数
#ifdef ONLINE_JUDGE                 //如果有oj系统(在线判定),则忽略文件读入,否则使用文件作为标准输入
#else
freopen("1.txt", "r", stdin);   //从1.txt输入数据
#endif
int n,m;
cin>>n>>m;
createMaxtrix(m);
int k;
cin>>k;
for(int i=0;i<k;i++){
int s;
cin>>s;
judgeHC(n,s);
}
return 0;                       //返回0,如果不返回0,PAT会报错
}

void createMaxtrix(int m){//构造邻接矩阵
for(int i=0;i<m;i++){
int x,y,d;
cin>>x>>y;
a[x][y]=1;
a[y][x]=1;
}
}
void judgeHC(int N,int n){
int x,y,i=0;
cin>>x;
int start=x;//记录起始结点
int flag[201]={0};
flag[x]=1;
if(n>=N+1){//如果结点数小于N+1,一定不包含所有结点(或包含所有结点但不成环)
for(i=i+1;i<n;i++){
int y;
cin>>y;
if(a[x][y]==1){
if(flag[y]==0){//该元素还未被访问
flag[y]=1;
x=y;
}
else if(i==n-1&&y==start){//该元素被访问过且为最后一个元素,并且等于起始元素,形成环路
cout<<"YES"<<endl;
return;
}
else break;
}//if
else break;
}//for
}//if
for(i=i+1;i<n;i++){
int aa;
cin>>aa;
}
cout<<"NO"<<endl;
return ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: