POJ1041 John's trip
来源:互联网 发布:淘宝店铺复制宝贝 编辑:程序博客网 时间:2024/06/07 12:14
题目大意:判断是否能组成欧拉回路。
思路:首先要判断图是否联通,再要判断全部是不是偶数点。如果满足以上两个,再用深搜去寻路径。题目要求要输出最小序列的。那么我们把遍按从小到大记录下来。然后搜的时候就从小到大搜,搜到以后就立即输出,得到的就是最小序。
#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<algorithm>using namespace std;const int INF=1<<28;struct node{ int s,e;}map[2000]; //用该结构体记录边,s,e分别记录改边的两个端点int MAX;vector<int> path; //用这个容器记录得到的路径int vis[2000];int v[50];int set[50]; int deg[50]; //深度int home;int find(int x){ int r=x; while(r!=set[r]) r=set[r]; return r;}void merge(int x,int y){ x=find(x); y=find(y); if(x==y)return; else set[x]=y;}void dfs(int cur){ int i; for(i=1;i<=MAX;i++){if(!vis[i])continue;if(map[i].s==cur) //如果找到一个端点 就继续深搜另外一个端点{vis[i]=0;dfs(map[i].e);path.push_back(i);}else if(map[i].e==cur){vis[i]=0;dfs(map[i].s);path.push_back(i);}}}int main(){ int a,b,z; while(scanf("%d%d",&a,&b)!=EOF) { memset(deg,0,sizeof(deg));memset(vis,0,sizeof(vis));memset(v,0,sizeof(v));for(int i=0;i<45;i++)set[i]=i; for(int i=0;i<2000;i++) map[i].s=map[i].e=-1;path.clear();MAX=0; //初始化 if(!a && !b)break; home = a > b ? b : a; scanf("%d",&z);MAX=max(MAX,z); map[z].e=a;map[z].s=b; deg[a]++; deg[b]++; v[a]=v[b]=1;vis[z]=1; //记录边 merge(a,b); while(scanf("%d%d",&a,&b)!=EOF) { if(!a && !b)break; scanf("%d",&z);MAX=max(MAX,z);map[z].e=a;map[z].s=b; deg[a]++; deg[b]++; v[a]=v[b]=1;vis[z]=1; merge(a,b); } int num=0; int tem=0; for(int i=0;i<45;i++) { if(i==set[i] && v[i])tem++; if(deg[i]%2==1 && v[i])num++; } // printf("max=========%d",MAX);//printf("num===%d tem====%d\n",num,tem); if(num!=0 || tem!=1){printf("Round trip does not exist.\n");continue;} //判断 else { dfs(home); } int i; // printf("-----------------------"); int first=1; // printf("size=====%d",path.size());for(i=path.size()-1;i>=0;i--) if(first) {printf("%d",path[i]);first=0;} else printf(" %d",path[i]); putchar(10); } return 0;}
- POJ1041 John's trip
- POJ1041 John's trip
- poj1041-John's trip
- poj1041 John's trip (欧拉回路)
- poj1041 John's trip,无向图求欧拉回路路径
- poj1041 John's trip (无向图求欧拉回路方案)
- POJ1041 John's trip 欧拉回路路径查找
- poj1041 John's trip(欧拉回路+输出路径)
- POJ1041 John's trip(欧拉回路+打印路径)
- poj1041 John's trip【无向图欧拉回路判定+输出路径】
- POJ1041 John's trip(欧拉回路 + 并查集 + dfs)
- PKU1041 John's trip
- poj_1041 John's trip
- John's trip
- John's trip
- John's trip
- POJ 1041 John's Trip
- poj 1041 John's trip
- POJ 1391 Erdos Numbers 最短路径
- 数据库2
- 关于:宏 (带参数的宏定义)
- go实现留言本
- uestc oj 1035 论文搜索
- POJ1041 John's trip
- 搭建 eclipse pydev python 开发环境 on mac and windows
- 在codeblocks下的文件读写
- 细说Cookie
- 用crtmpserver搭建开源rtmp直播服务
- div和span
- 每日一C------广播
- The fundamentals of Bash Scripting(Bash脚本编程基础)|nettusplus
- 用开源nginx-rtmp-module搭建flash直播环境