Open yooocen opened 6 years ago
不说了,坑点都标出来了,什么段错误啊,什么判断除0以后的数字不可重复,再判断首尾不想等
// // Hamiltonian.cpp // test // // Created by 陈涌达 on 2018/4/7. // Copyright © 2018年 陈涌达. All rights reserved. // #include <cstdio> #include <algorithm> using namespace std; const int MX=220; int Graph[MX][MX] = {0}; int n , m; bool isHamiltonian(int length){ bool flag = false; //长度不能超过n+1 if(length!=n+1){ flag = true; } //不要用length,会有段错误 int array[MX] ={0}; int cnt[MX] ={0}; for(int k = 0 ; k < length; k++){ scanf("%d",&array[k]); //除了首尾之外的地方不可以重复 if(cnt[array[k]]==0 && k!=0 /*&& k!=length-1*/){ cnt[array[k]] =1; }else if(cnt[array[k]]==1 && k!=0 /*&& k!=length-1*/){ flag = true; } if(k!=0 && Graph[array[k-1]][array[k]]!=0){ continue; }else if(k==0){ continue; }else{ flag = true; } } if(array[0]!=array[length-1] ){ flag = true; } //不能这么写的 // if(cnt[0]==1){ // flag = true; // } return flag; } int main() { scanf("%d %d",&n,&m); for(int i = 0 ; i<m;i++){ int from , to; scanf("%d %d",&from ,&to); Graph[from][to] = Graph[to][from] =1; } int query = 0; scanf("%d",&query); int k; for(int i = 0 ; i <query;i++){ scanf("%d", &k); bool flag = isHamiltonian(k); if(flag){ printf("NO\n"); }else{ printf("YES\n"); } } return 0; }
不说了,坑点都标出来了,什么段错误啊,什么判断除0以后的数字不可重复,再判断首尾不想等