L3-008 喊山(BFS)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leekerian/article/details/88834128

简单BFS

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>

using namespace std;
struct node{
    int x,num;
};

vector<int> vt1[11111];
int vis[11111];
int vis1[11111];
int max1;
int ans;
void bfs(int t1)
{
    memset(vis,0,sizeof(vis));
    queue<node> qu;
    node st;
    st.x=t1;
    st.num=1;
    qu.push(st);
    max1=-1;
    ans=t1;
    vis[t1]=1;
    while(!qu.empty())
    {
        node kk=qu.front();qu.pop();
        if(kk.num>max1)
        {
            max1=kk.num;
            ans=kk.x;
        }
        else if(kk.num==max1)
            ans=min(kk.x,ans);
        for(int i=0;i<vt1[kk.x].size();i++)
        {
            if(!vis[vt1[kk.x][i]])
            {
                node nt;
                nt.x=vt1[kk.x][i];
                nt.num=kk.num+1;
                qu.push(nt);
                vis[nt.x]=1;
            }
        }
    }
}
int main()
{
    int n,m,k;
    scanf("%d%d%d",&n,&m,&k);
    for(int i=0;i<m;i++)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        vt1[a].push_back(b);
        vt1[b].push_back(a);
    }
    for(int i=0;i<k;i++)
    {
        int t1;
        scanf("%d",&t1);
        bfs(t1);
        if(ans==t1)
            printf("0\n");
        else
            printf("%d\n",ans);        
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/leekerian/article/details/88834128