1122 Hamiltonian Cycle (25 分)难度: 一般 / 知识点: 模拟 哈密顿回路

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1122 Hamiltonian Cycle (25 分)难度: 一般 / 知识点: 模拟 哈密顿回路相关的知识,希望对你有一定的参考价值。


https://pintia.cn/problem-sets/994805342720868352/problems/994805351814119424
本题考察的就是哈密顿回路

  • 只能走n+1步
  • 有n个不同的点
  • 且开头结尾必须是同一个点
  • 且所有的路径都是可达的
#include<bits/stdc++.h>
using namespace std;
const int N=510;
const int M=1010;
int g[N][N],n,m,k,t;
int a[M];
/*bool check()//方法一

    int st[M]=0;
    for(int i=0;i<=t-1;i++)
    
        if(i&&(g[a[i-1]][a[i]]!=1 || st[a[i]]&&i!=t-1 )) return false;
        st[a[i]]=1;
    
    if(a[0]!=a[t-1] || t!=n+1 ) return false;
    return true;
*/
bool check()//方法二

    set<int>st;
    for(int i=0;i<t;i++)
    
    	st.insert(a[i]);
    	if(i&&g[a[i-1]][a[i]]!=1) return false;
    
    if(st.size()!=n || a[0]!=a[t-1] || t!=n+1 ) return false;
    return true;

int main(void)

    cin>>n>>m;
    memset(g,0x3f,sizeof g);
    for(int i=0;i<m;i++)
    
        int a,b; cin>>a>>b;
        g[a][b]=g[b][a]=1;
    
    cin>>k;
    for(int i=0;i<k;i++)
    
        cin>>t;
        for(int j=0;j<t;j++) cin>>a[j];
        if(check()) puts("YES");
        else puts("NO");
    
    return 0;

以上是关于1122 Hamiltonian Cycle (25 分)难度: 一般 / 知识点: 模拟 哈密顿回路的主要内容,如果未能解决你的问题,请参考以下文章

1122 Hamiltonian Cycle (25 分)

PAT 1122 Hamiltonian Cycle

PAT 1122 Hamiltonian Cycle

PAT 1122 Hamiltonian Cycle[比较一般]

PAT甲级——A1122 Hamiltonian Cycle25

1122 Hamiltonian Cycle (25 分)难度: 一般 / 知识点: 模拟 哈密顿回路