zoukankan      html  css  js  c++  java
  • network of emergency contacts---BFS

    本题目的主要难点在如何寻找最后一层的数,利用book标记数组可以很好的解决问题。book=0的时候说明没被连接过,若要连接时,将book等于上一层book+1.

    需要注意的是,对于图的问题建立邻接矩阵是非常省时间的方法。类似这个道题,我没有用邻接矩阵,因此每次都要进入150的for循环。但是如果用矩阵,最多则是每次100的循环。这样对于n*n*n.....来说则会剩下很多时间。

    #include<stdio.h>
    #include<stdlib.h>
    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
    ",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<q.rear){
            int temp=q.a[q.head++];
            for(int i=0;i<150;i++){
                if(A[i]==temp&&book[B[i]]==0){
                    q.a[q.rear++]=B[i];
                    book[B[i]]=book[A[i]]+1;     //标记层数
                }
            }
        }
        int c=0;
        int max=0;
        for(int i=0;i<=299;i++){            //寻找最大层数
            if(c<book[i]){
                c=book[i];
            }
        }
        for(int i=299;i>=0;i--){            //寻找最大层数总最大值
            if(book[i]==c){
                max=i;
                break;
            }
        }
        return max;
    }
  • 相关阅读:
    jsp文件导包 糖不苦
    java 数字和日期处理 糖不苦
    java时间的一些处理 糖不苦
    Vimdiff 使用
    C++资源不完全索引
    sprintf 函数详细解释
    C++ 时间
    C++的可移植性和跨平台开发
    Solaris下开发64位程序的注意事项
    C/C++ 数学库函数
  • 原文地址:https://www.cnblogs.com/lvcoding/p/6600355.html
Copyright © 2011-2022 走看看