1 6 7 0 0 3 0 4 1 4 1 5 2 3 2 4 3 5
0 3 4 2 5 1
自己当时不会的题。。。现在补回来也不晚。。。想当初难得一逼的题现在呵呵了。。
题目已告知用BFS。从给定的s点开始搜索。先找到图中与s点相连的点 并将此点进入队列和p数组 p数组用来记录搜索到的点
然后出队列的点再找与此点相连的点。。。
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <iostream> using namespace std; int map[105][105],q[1005],vist[105],p[105];//q是队列 p是记录搜索到的点 int num ,t,k,m,s; void BFS (int s) { int in = 0,out = 0; vist[s] = 1; q[in++] = s; p[num++] = s; while (out < in) { int x = q[out++]; for (int i = 0; i < k; i++) { if ( vist[i] == 0 && map[x][i]) { vist[i] = 1; p[num++] = i; q[in++] = i; } } } } int main () { int a,b; scanf ("%d",&t); while (t--) { num = 0; memset (vist,0,sizeof (vist)); scanf ("%d%d%d",&k,&m,&s); for (int i = 0 ; i < m; i++) { scanf ("%d%d",&a,&b); map[a][b] = map[b][a] = 1; } BFS (s); for (int i = 0; i < num; i++) { printf ("%d ",p[i]); } } return 0; }