DPS做hdoj的1272:小希的迷宫

KBdancer 2011-11-30 02:23:02
如题,我用DFS判断是否连通,另外根据边数和顶点数的关系判断是否有环,但无论怎么改都是WA,求大牛指点!
下面贴出小菜我的乱码:
// 小希的迷宫.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
using namespace std;
struct Edge
{
int v1,v2;
int flag;
};
int v[100001];
void dfs(Edge *edge,int v,int size)
{
for(int i=0;i<size;i++)
{
if(edge[i].v1==v && edge[i].flag==0)
{
edge[i].flag=1;
dfs(edge,edge[i].v2,size);
}
if(edge[i].v2==v && edge[i].flag==0)
{
edge[i].flag=1;
dfs(edge,edge[i].v1,size);
}
}
}
int main()
{
int m,n;
while(cin>>m>>n)
{
if(m==-1 && n==-1)
return 0;
if(m==0 && n==0)
cout<<"Yes\n";
else
{
int loop=0;
Edge edge[1000];
int size_v=0,size_e=0,symbol=0,max_v;
memset(v,0,sizeof(v));
max_v=(m>=n)?m:n;
for(int i=0;i<1000;i++)
{
edge[i].flag=0;
}
edge[0].v1=m; edge[0].v2=n;
v[m]=1;v[n]=1;
size_e++;
while(cin>>m>>n,m!=0 || n!=0)
{
edge[size_e].v1=m; edge[size_e++].v2=n;
v[m]=1;v[n]=1;
if(m>max_v)
max_v=m;
if(n>max_v)
max_v=n;
}
for(int i=1;i<=max_v;i++)
if(v[i]==1)
size_v++;
if(size_e>=size_v)//判断是否有环:某一个连通分支的边数>=该分支的顶点树,则有环。
loop=1;
else
dfs(edge,edge[0].v1,size_e);//深搜只是判断是否是连通图。
for(int i=0;i<size_e;i++)
{
if(edge[i].flag==0)
{
symbol=1;
break;
}
}
if(symbol==0 && loop==0)
cout<<"Yes\n";
else
cout<<"No\n";
}
}
}
...全文
111 点赞 收藏 回复
写回复
回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
相关推荐
发帖
其它技术问题
创建于2007-09-28

3849

社区成员

C/C++ 其它技术问题
申请成为版主
帖子事件
创建了帖子
2011-11-30 02:23
社区公告
暂无公告