PAT--List Components (25)--BFS,DFS经典
来源:互联网 发布:amd显卡驱动linux 编辑:程序博客网 时间:2024/06/14 00:01
http://www.patest.cn/contests/mooc-ds2015spring/06-图1
觉得这题很经典,有利于理解BFS和DFS内部流程。
尤其注意打印位置,括号分出来打印,DFS里面只打印数字。。。
更新:
/*<span style="color:#ff0000;">20150406更新</span>*后来又研究了一下BFS,哈哈,修改如下*现在理解比较清楚了,你在visited[]=true处打印,*肯定只访问一次啦。亲,我之前写的当笑话看啦,*可以看到我的进步哟*/void BFS(int x){while(!Q.empty())Q.pop();Q.push(x);int i;visited[x]=true;///printf(" %d",x);while(!Q.empty()){int t=Q.front();Q.pop();for(i=0;i<n;i++){if(!visited[i] && map[i][t]==1){//printf("\nt,i:%d,%d",t,i);Q.push(i);visited[i]=true;printf(" %d",i);}}}}
#include<stdio.h>#include<queue>using namespace std;//地图int map[10][10];bool visited[10];//BFS需要queue<int> Q;//初始化visited和Qvoid init(){int i;for(i=0;i<10;i++){visited[i]=false;}while(!Q.empty())Q.pop();}//记录节点数int n;//深度优先,对应单个连通集//注意visited[x]和printf的位置void DFS(int x){visited[x]=true;printf(" %d",x);int i;for(i=0;i<n;i++){if(map[x][i]==1 && visited[i]==false){DFS(i);}}}//将每个连通集输出void dfscom(){int i;for(i=0;i<n;i++){if(!visited[i]){printf("{");DFS(i);printf(" }\n");}}}//注意两个visited[]位置。//一开始我只写一个visited,在print后,也就是打印相当于访问//如下(错误的代码)/*void BFS(int x){while(!Q.empty())Q.pop();Q.push(x);int i;while(!Q.empty()){int t=Q.front();Q.pop();printf(" %d",t);visited[i]=true;//这样在打印前可能入队列很多次。。。。//建议可以在打印前判断是否是访问过。只不过会浪费一些队列位置for(i=0;i<n;i++){if(!visited[i] && map[i][t]==1){//printf("\nt,i:%d,%d",t,i);Q.push(i);}}}}*/void BFS(int x){while(!Q.empty())Q.pop();Q.push(x);int i;visited[x]=true;///while(!Q.empty()){int t=Q.front();Q.pop();printf(" %d",t);for(i=0;i<n;i++){if(!visited[i] && map[i][t]==1){//printf("\nt,i:%d,%d",t,i);Q.push(i);visited[i]=true;}}}}void bfscom(){int i;for(i=0;i<n;i++){if(!visited[i]){printf("{");BFS(i);printf(" }\n");}}}int main(){init();int e;int i,j;for(i=0;i<10;i++){for(j=0;j<10;j++){map[i][j]=0;}}scanf("%d%d",&n,&e);while(e--){int t1,t2;scanf("%d%d",&t1,&t2);map[t1][t2]=1;map[t2][t1]=1;}dfscom();//注意初始化init();bfscom();return 0;}
0 0
- PAT--List Components (25)--BFS,DFS经典
- PAT 05-1 List Components (简单DFS与BFS)
- PAT 数据结构 05-图1. List Components (25) 深度搜索DFS和广度搜索BFS
- PAT:05-1. List Components (25),Go语言解答
- 经典DFS PAT 1103
- 【经典算法】:BFS与DFS
- PAT--列出连通集--dfs&bfs
- List Components
- 1094. The Largest Generation (25)-PAT甲级真题(bfs,dfs,树的遍历)
- 1106. Lowest Price in Supply Chain (25)-PAT甲级真题(dfs,bfs,树的遍历)
- PAT 1013. Battle Over Cities (25)(孤岛的个数,DFS或者BFS)
- 05-图1. List Components (25)
- 06-图1. List Components (25)
- 05-图1. List Components (25)
- 05-图1. List Components (25)
- 05-图1. List Components (25)
- PTA 5-1 List Components (25分)
- 1079. Total Sales of Supply Chain (25)-PAT甲级真题(dfs,bfs,树的遍历)
- 示例7 通过游标实现
- 真正免费空间提供商
- 示例8 DBMS_SQL程序包
- 示例9 事务控制语句
- Redis Java客户端Jredis
- PAT--List Components (25)--BFS,DFS经典
- 某浙大大牛分享的求职总结
- while循环的使用及其和for循环的对比总结
- 03-树1. List Leaves (25)
- 示例10 创建存储过程
- 示例11 调用存储过程
- Cocos2d-x《雷电大战》(5)-单例模式英雄飞机闪亮登场!
- RMI远程方法调用demo,适合新手
- 增加留言版块——在线留言板1