欧拉回路。
判断欧拉回路的题。
判断欧拉回路的题。
将无向图看做双向有向图来处理
数据量比较大,顶点个数大于一万,用邻接矩阵存储处理会爆内存。
所以要用边表存储来对边进行DFS搜索
pass:好久不写图论的,边表存储全忘掉了。。。看着以前的模板来搞的
#include<iostream> #include<cstring> #include<stack> #include<cstdio> using namespace std; const int Maxsizem = 100010; const int Maxsizen = 10010; typedef struct { int to,next; } node; node edge[Maxsizem]; int cnt,vis[Maxsizem],head[Maxsizen]; int main() { void addedge(int u,int v); void dfs(int n,int u); int n,m; while(cin>>n>>m) { int u,v; cnt = 0; memset(edge,0,sizeof(edge)); memset(vis,false,sizeof(vis)); memset(head,-1,sizeof(head)); for(int i = 0 ; i < m ; i++) { cin>>u>>v;/*无向图的边表存储*/ addedge(u,v); addedge(v,u); } dfs(n,1); } return 0; } void addedge(int u,int v) /*加边函数*/ { edge[cnt].to = v; edge[cnt].next = head[u]; head[u] = cnt++; } void dfs(int n,int u ) /*对边进行深搜*/ { for(int i = head[u] ; i != -1 ; i = edge[i].next) { int v = edge[i].to; if(!vis[i]) { vis[i] = true;/*标记使用过的边*/ dfs(n,v); /*想下一个连通边搜索*/ } } printf("%d\n",u); }