2142 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
2016-11-26 09:48
483 查看
数据结构实验之图论二:基于邻接表的广度优先搜索遍历
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int MAXN=100+10; int n,m,s; bool vis[MAXN]; int head[MAXN]; int cnt; struct node { int v; int next; }edge[5000]; void add(int u,int v) { edge[cnt].v=v; edge[cnt].next=head[u]; head[u]=cnt++; } bool check(int u,int v) { for(int i=head[u];i!=-1;i=edge[i].next) { if(edge[i].v==v)return 1; } return 0; } void bfs(int s) { memset(vis,0,sizeof(vis)); int q[110]; int qhead=0,qtail=0; vis[s]=1; q[qtail++]=s; while(qhead<qtail) { int k=q[qhead++]; printf("%d ",k); for(int i=0;i<n;++i) { if(!vis[i]&&check(k,i)) { vis[i]=1; q[qtail++]=i; } } } } int main() { int t; scanf("%d",&t); while(t--) { scanf("%d%d%d",&n,&m,&s); memset(head,-1,sizeof(head)); int u,v; cnt=0; for(int i=0;i<m;++i) { scanf("%d%d",&u,&v); add(u,v); add(v,u); } bfs(s); puts(""); } return 0; }
错误的代码 /*#include<stdio.h> #include<string.h> int k, m, t; int visit[200], b[200]; //visit是标记数组;b数组用来存放搜索的点,每次搜索一遍经排序后就输出 struct node { int u, v; node *next; }*head[200]; //;邻接表 void add(int u, int v) { node *p=new node; p->u=u; p->v=v; p->next=head[u]; head[u]=p; } void bfs(int t) { node *p=new node; visit[t]=1; p=head[t]; int s=1; while(p) { if(visit[p->v]==0) { b[s++]=p->v; visit[p->v]=1; p=p->next; } else { p=p->next; } for(int i=1;i<s;i++) //用冒泡把每次搜索到的与同一个节点同层的邻接点从小到大排序 { for(int j=1;j<s-i;j++) { if(b[j]>b[j+1]) { int t; t=b[j]; b[j]=b[j+1]; b[j+1]=t; } } } for(int i=1;i<s;i++) //把每次搜索到的节点输出 printf(" %d", b[i]); for(int i=1;i<s;i++) //广度优先搜索 bfs(b[i]); } int main() { int n, u, v; scanf("%d", &n); while(n--) { memset(visit,0,sizeof(visit)); memset(head,NULL,sizeof(head)); scanf("%d%d%d", &k, &m, &t); while(m--) { scanf("%d%d", &u, &v); add(u, v); //add函数建立邻接表 add(v, u); } printf("%d", t); //先把最先需要搜索的点输出,即遍历的起始点 bfs(t); printf("\n"); } return 0; } */
相关文章推荐
- SDUT2142数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 【2142】数据结构实验之图论二:基于邻接表的广度优先搜索遍历 (SDUT)
- SDUTOJ 2142 数据结构实验图论一:基于邻接表的广度优先搜索遍历
- SDUT 2142 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 【2142】数据结构实验之图论二:基于邻接表的广度优先搜索遍历 (SDUT)
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- sdutacm-数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- SDUT 2412 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- SDUT 2142 数据结构实验之图论二:基于邻接表的广度优先搜索遍历