本题目的主要难点在如何寻找最后一层的数,利用book标记数组可以很好的解决问题。book=0的时候说明没被连接过,若要连接时,将book等于上一层book+1.
需要注意的是,对于图的问题建立邻接矩阵是非常省时间的方法。类似这个道题,我没有用邻接矩阵,因此每次都要进入150的for循环。但是如果用矩阵,最多则是每次100的循环。这样对于n*n*n.....来说则会剩下很多时间。
#include#include typedef struct{ int a[300]; int rear; int head;}queue;queue q;int A[150],B[150];int book[300];int test(int data[300],int startNum);void build(int data[300]){ for(int i=0;i<300;i++) data[i]=rand()%100+1;}void main(){ //freopen("intput.txt","r",stdin); int data[300]; for(int l=0;l<10;l++){ build(data); printf("%d\n",test(data,data[0])); }}int test(int data[300],int startNum){ for(int i=0;i<300;i++) book[i]=0; for(int i=0,j=0;i<299;j++){ //将数据分为两个数组中A表示边的出发点,B表示边的终点 A[j]=data[i]; B[j]=data[i+1]; i=i+2; } q.rear=0; q.head=0; q.a[q.rear++]=startNum; book[startNum]=1; while(q.head =0;i--){ //寻找最大层数总最大值 if(book[i]==c){ max=i; break; } } return max;}