站外图论水题调(有注释
查看原帖
站外图论水题调(有注释
723253
Typical_typhoon楼主2023/8/11 20:52

http://ybt.ssoier.cn:8088/problem_show.php?pid=1341

code:



#include<bits/stdc++.h>
#define int long long
using namespace std;
const int INF=0x3f3f3f;
const int MAXN=1000+10;
int a[MAXN][MAXN];
int ans[MAXN];
int k[MAXN];
int vis[MAXN];
int n,m,u,v;

int t=1;
void pr(){
    for(int i=1;i<=n;i++){
        cout<<ans[i]<<" ";
    }
    if(a[ans[n]][t]==1){
        cout<<a[t];
    }
    return;//输出 
}
void dfs(int id,int s){
    if(s==n+1){
        pr();
        exit(0);//判断输出,结束程序 
    }
    for(int i=1;i<=n;i++){
        if(vis[i]==0&&a[i][id]==1){
            vis[i]=1;
            ans[s]=i;
            dfs(i,s+1);
            vis[i]=0;//上解锁+深搜下一个 
        }
    }
}
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>u>>v;
        a[u][v]=1;
        a[v][u]=1;//输入加存图 
        k[u]++;
        k[v]++;
    }
    for(int i=1;i<=n;i++){
        if(k[i]%2==1){
            t=i;
        }//找奇点 
    }
    dfs(t,1);//深搜 
    return 0;
}
2023/8/11 20:52
加载中...