pat-1126

原来我就像印度电工,哪用到就在那声明,特别乱而且容易出戳,现在我变成德国电工了哈哈哈哈~ 

#include<iostream>
#include<vector>
using namespace std;
vector<int>nume[509];//记录度数出边数 
int visit[509]={0},cnt=0;//记录是否访问过q 
//判断是否连通,看看顶点数是多少,自然不能有重复访问顶点的情况
//cnt 1 
// cnt 不能固定在参数列表考虑到递归对return 的影响还是写无返回值函数(注意) 
void dfs(int index)
{//End
cnt++;
visit[index]=1;
for(int i=0;i<nume[index].size();i++)
if(visit[nume[index][i] ]==0)
 dfs(nume[index][i]);
  
}
int main()
{ int n,m,_1,_2,even=0,t=1;
cin>>n>>m;
for(int i=0;i<m;i++)
{   cin>>_1>>_2;
	nume[_1].push_back(_2);
	nume[_2].push_back(_1);
}
for(int i=1;i<=n;i++)
{
if(i!=1) printf(" ");
printf("%d",nume[i].size());
if(nume[i].size()%2==0) even++;
}
printf("\n");
dfs(1) ;
if(cnt!=n) printf("Non-Eulerian\n");
else if(even==n) printf("Eulerian\n");
else if(even==n-2) printf("Semi-Eulerian\n");
else printf("Non-Eulerian\n");
return 0;
}

总结

1.dfs尽量不要有返回值,因为递归过程会对他产生影响对return

2.注意直接将节点个数信息复制下来防止弄错

3.判断连不连通这里是一个好例子

英语

总结DFS 上次树的打印路径问题 popback尚未解决

与上次路径问题的区别是 上次是存入路径 中的设置标记 这次是只要访问过就要设标记而且不能再删除

猜你喜欢

转载自blog.csdn.net/m0_45359314/article/details/112803135