网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月09日漏签0天
acm吧 关注:26,544贴子:48,332
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 0回复贴,共1页
<<返回acm吧
>0< 加载中...

DFS做hdoj的1272小希的迷宫(刚那个代码乱了,重发),老WA,求指点!

  • 只看楼主
  • 收藏

  • 回复
  • 897414566
  • 路人甲
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
// 小希的迷宫.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"#include
<iostream>#include <stdio.h>
using namespace std;
struct Edge//用结构体存储边信息,flag表示该边是否被选取。
{
int v1,v2;
int flag;
}edge[1000];
int v[100001];
int visited;
bool dfs(Edge *edge,int v,int size)
{
for(int i=0;i<size;i++)
{
if(visited>=size)
return 0;
if(edge[i].v1==v && edge[i].flag==0)
{
edge[i].flag=1;
visited++;
dfs(edge,edge[i].v2,size);
}
if(edge[i].v2==v && edge[i].flag==0)
{
edge[i].flag=1; visited++;
dfs(edge,edge[i].v1,size);
}
}
return 0;
}
int main()
{
int m,n;
while(cin>>m>>n)
{
if(m==-1 && n==-1)
return 0;
if(m==0 && n==0)//判断特殊情况:开始就输入两个0
cout<<"Yes\n";
else
{
int loop=0;
int size_v=0,size_e=0,symbol=0,max_v;//max_v用来存储点的最大编号
visited=0;
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++;
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==1)
cout<<"No\n";
else
{
if(size_e>=size_v)//判断是否有环:某一个连通分支的边数>=该分支的顶点数,则有环。
cout<<"No\n";
else
cout<<"Yes\n";
}
}
}
}
顺便说一下,这发代码怎么不能换行呀?还得自己调半天。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 0回复贴,共1页
<<返回acm吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示