您的位置:首页 > 其它

uva 10596 Morning Walk(欧拉回路)

2015-07-24 09:59 501 查看
这道题是神坑啊,花了我将近3个小时,本来敲的挺顺的,交上去就是wa,坑点真坑,原来是有的路口交叉点可以没有

路通向它,无语,没有路通向也可以叫交叉点。。。。以后一定得考虑多种情况,用了bfs(vector做的)和dfs判断

的是否连通,判断连通之后只需要再判断是否都有偶数个度就ok了,坑,真坑。

bfs代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<queue>
using namespace std;
vector<int>map[10005];
int d[10005];
int visit[10005];
int m,n;
void bfs(int x)
{
queue<int>que;
que.push(x);
visit[x] = 1;
while(!que.empty())
{
int y = que.front();
que.pop();

for(int i=0; i<map[y].size(); i++)
{
if(!visit[map[y][i]])
{
visit[map[y][i]] = 1;
que.push(map[y][i]);
}
}
}
return;
}
int main()
{
int i,a,b;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=0; i<n; i++)
map[i].clear();
memset(visit,0,sizeof(visit));
memset(d,0,sizeof(d));
for(i=0; i<m; i++)
{
scanf("%d%d",&a,&b);
d[a]++;
d[b]++;
map[a].push_back(b);
map[b].push_back(a);
}
bfs(0);
int flag = 0;
for(i=0; i<n; i++)
{
if(d[i]!=0)
if(!visit[i]||d[i]%2!=0)
{
flag = 1;
break;
}
}
if(m==0)
flag = 1;
if(flag)
puts("Not Possible");
else
puts("Possible");
}
}

dfs代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<queue>
int map[205][205];
int d[205];
int visit[205];
int m,n;
void dfs(int x)
{
visit[x] = 1;
for(int i=0; i<n; i++)
{
if(!visit[i]&&map[x][i]==1)
{
// map[x][i] = 0;
dfs(i);
}
}
return;
}
int main()
{
int i,a,b;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(map,0,sizeof(map));
memset(visit,0,sizeof(visit));
memset(d,0,sizeof(d));
for(i=0; i<m; i++)
{
scanf("%d%d",&a,&b);
d[a]++;
d[b]++;
map[a][b] = map[b][a] = 1;
}
dfs(0);
int flag = 0;
for(i=0; i<n; i++)
{
if(d[i]!=0)
if(!visit[i]||(d[i]%2==1))
{
flag = 1;
break;
}
}
if (n==0){
flag=1;
}
if(flag)
puts("Not Possible");
else
puts("Possible");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: