1122. Hamiltonian Cycle (25)
1122. Hamiltonian Cycle (25)
The "Hamilton cycle problem" is to find a simple cycle that contains every vertex in a graph. Such a cycle is called a "Hamiltonian cycle".
In this problem, you are supposed to tell if a given cycle is a Hamiltonian cycle.
Input Specification:
Each input file contains one test case. For each case, the first line contains 2 positive integers N (2< N <= 200), the number of vertices, and M, the number of edges in an undirected graph. Then M lines follow, each describes an edge in the format "Vertex1 Vertex2", where the vertices are numbered from 1 to N. The next line gives a positive integer K which is the number of queries, followed by K lines of queries, each in the format:
n V1 V2 ... Vn
where n is the number of vertices in the list, and Vi's are the vertices on a path.
Output Specification:
For each query, print in a line "YES" if the path does form a Hamiltonian cycle, or "NO" if not.
Sample Input:6 10 6 2 3 4 1 5 2 5 3 1 4 1 1 6 6 3 1 2 4 5 6 7 5 1 4 3 6 2 5 6 5 1 4 3 6 2 9 6 2 1 6 3 4 5 2 6 4 1 2 5 1 7 6 1 3 4 5 2 6 7 6 1 2 5 4 3 1Sample Output:
YES NO NO NO YES NO
#include<stdio.h>
#include<algorithm>
using namespace std;
int N,m;
int adj[210][210];
int judge(){
int n,i;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
if(n!=N+1){//满足个数为N+1
return 0;
}
if(a[0]!=a[n-1]){//首尾同一个
return 0;
}
for(i=0;i<n-1;i++){
int now=a[i],next=a[i+1];
if(adj[now][next]==0){//相邻两点是否有边
return 0;
}
}
sort(a,a+n-1);
for(i=0;i<n-2;i++){//测试点2
if(a[i]==a[i+1]){//每个点出现1次
return 0;
}
}
return 1;
}
int main(){
int c1,c2,i,k;
scanf("%d %d",&N,&m);
for(i=0;i<m;i++){
scanf("%d %d",&c1,&c2);
adj[c1][c2]=adj[c2][c1]=1;
}
scanf("%d",&k);
for(i=0;i<k;i++){
if(judge()){
printf("YES\n");
}
else{
printf("NO\n");
}
}
}
推荐阅读
-
PAT 甲级 1122. Hamiltonian Cycle (25)
-
【PAT】1122. Hamiltonian Cycle (25)
-
PAT甲1122 Hamiltonian Cycle(25 分)
-
[Python](PAT)1122 Hamiltonian Cycle(25 分)
-
A1122 Hamiltonian Cycle (25 分| 图论,附详细注释,逻辑分析)
-
PAT 1122 Hamiltonian Cycle
-
PAT (Advanced Level) Practice - 1122 Hamiltonian Cycle(25 分)
-
PAT甲级 1122. Hamiltonian Cycle (25)
-
1122 Hamiltonian Cycle (25 分)
-
1122 Hamiltonian Cycle (25 分)