PAT A1122 hamiltonian cycle (25)
2017-03-03 12:45
260 查看
//哈密顿环路,能够沿边形成一个覆盖所有点的环路,中间点不重复。判断:1、k=n+1 2、数组首尾相同才能形成环路 3、每个点出现1次 4、必须有边才能走
#include<cstdio> #include<vector> #include<algorithm> using namespace std; const int MAX=210; int G[MAX][MAX]={0}; int judge(vector<int> vn){ int vis[MAX]={0}; int i; if(vn[0]!=vn[vn.size()-1]) return 0;//not a cycle for(i=1;i<vn.size();i++){ if(G[vn[i-1]][vn[i]]==1){//if has an edge vis[vn[i]]++; if(vis[vn[i]]>1) return 0; }else return 0;//not a edge } return 1; } int main(){ int n,m,i; scanf("%d%d",&n,&m); int v1,v2; for(i=0;i<m;i++){ scanf("%d%d",&v1,&v2); G[v1][v2]=G[v2][v1]=1; } int k,temp,query; scanf("%d",&query); for(i=0;i<query;i++){ scanf("%d",&k); vector<int> vn; for(int j=0;j<k;j++){ scanf("%d",&temp); vn.push_back(temp); } if(k==(n+1)){ if(judge(vn)==1) printf("YES\n"); else printf("NO\n"); }else printf("NO\n"); } system("pause"); return 0; }
相关文章推荐
- PAT A 1033. To Fill or Not to Fill (25)
- 1122. Hamiltonian Cycle (25)(哈密顿)
- PAT A 1003. Emergency (25)
- PAT A 1006. Sign In and Sign Out (25)
- PAT A 1021. Deepest Root (25)
- PAT A 1002. A+B for Polynomials (25)
- PAT A 1013. Battle Over Cities (25)
- PAT A 1066. Root of AVL Tree (25)
- PAT A 1078. Hashing (25)
- PAT A 1094. The Largest Generation (25)
- PAT A 1016. Phone Bills (25)【模拟】
- PAT A1002 A+B for Polynomials(25)
- PAT A 1007. Maximum Subsequence Sum (25)
- PAT A1110. Complete Binary Tree (25)
- PAT A 1003. Emergency (25)
- PAT A 1028. List Sorting (25)
- PAT A 1036. Boys vs Girls (25)
- PAT A 1067. Sort with Swap(0,*) (25)
- PAT A 1079. Total Sales of Supply Chain (25)
- PAT A 1082. Read Number in Chinese (25)