您的位置:首页 > 其它

NYOJ+一笔画问题+先要判断无向图的连通性(DFS or并查集),然后使用欧拉回路。

2016-03-05 23:53 330 查看
点击打开链接
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<cstdio>
using namespace std;
int bian[1010];
bool Map[1010][1010],vis[1010];
int P,Q;
///主要是先判断图的连通性,之后再使用欧拉回路。
void dfs(int cur)
{
vis[cur]=true;
for(int i=1;i<=P;i++){///像进栈一样额。
if(Map[cur][i]){
bian[cur]++;
if(!vis[i]){///判断是否访问过,防止重复访问额。
dfs(i);
}
}
}
}
int main()
{
int N=0,num=0,i=0,A=0,B=0,ok=0;
scanf("%d",&N);
while(N--){
scanf("%d%d",&P,&Q);
ok=0;
memset(Map,false,sizeof(Map));
memset(vis,false,sizeof(vis));
memset(bian,0,sizeof(bian));
memset(vis,0,sizeof(vis));
for(i=0;i<Q;i++){
scanf("%d%d",&A,&B);
Map[A][B]=Map[B][A]=true;
}
dfs(1);
for(i=1;i<=P;i++){
if(!vis[i]){
ok=1;
break;
}
}
if(ok)printf("No\n");
else{
num=0;
for(i=1;i<=P;i++){
if(bian[i]%2){
num++;
}
}
if(num==0||num==2)printf("Yes\n");
else printf("No\n");
}
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<cstdio>
using namespace std;
int pre[1010],bian[1010];
int P,Q;
void init()
{
int i=0;
for(i=0;i<=P;i++){
pre[i]=i;
}
}
int Find(int x)
{
int root=x;
while(pre[root]!=root){///找到节点的根
root=pre[root];
}
int cur=x,tmp;
while(cur!=root){///修改从该节点到根节点的所有节点的父亲为root.
tmp=pre[cur];
pre[cur]=root;
cur=tmp;
}
return root;
}
void Union(int x,int y)
{
int fx=Find(x);
int fy=Find(y);
if(fx!=fy){
pre[fx]=fy;///这里弄完之后会下次使用find会再一次路径压缩的。
}
}
int main()
{
int N=0,num=0,A=0,B=0,i=0,Count=0;
scanf("%d",&N);
while(N--){
init();
Count=0;num=0;
memset(bian,0,sizeof(bian));
scanf("%d%d",&P,&Q);
for(i=0;i<Q;i++){
scanf("%d%d",&A,&B);
bian[A]++;bian[B]++;
Union(A,B);
}
for(i=1;i<=P;i++){
if(Find(i)==i){
Count++;
}
if(bian[i]%2){
num++;
}
}
///printf("%d %d\n",num,Count);
if((num==0||num==2)&&Count==1){
printf("Yes\n");
}
else{
printf("No\n");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: