計ニンニク客習題:最短簡略化版


問題の説明
1週間の忙しい仕事を経験した後、ニンニク君は週末によく遊びたいと思っています.ニンニク君はいろいろなところに行きたいです.南どらや太鼓の路地に行っておいしいものを食べたいです.頤和園に行ってスケートをしたいです.懐柔スキー場にスキーに行きたいです.しかし、時間が限られていて、ニンニク君はすべての場所を游ぶことができません.最後に、彼はいくつか彼に近いところに行くことにしました.私たちはニンニク君が全部でNカ所に遊びに行きたいことを知っています.番号は1からNまでで、ニンニク君がいる場所の番号CとMの経路を知っています.今、ニンニク君はあなたに計算してもらいたいと思っています.彼はそれぞれの場所までどのくらいの場所を通らなければなりませんか.入力フォーマットの最初の行には、3つの正の整数N,M,Cが入力されます.代表的にニンニク君はN箇所に行きたいと思っていますが、Mパスがあります.ニンニク君はC番の所にいます.1≤N,C≤1000, 1≤C≤N, 1≤M≤10000. 重複するエッジがなく、図中のすべての点が互いに連通していることを保証します.出力フォーマットはN行を出力し、番号によって小さいから大きいまで、結果を出力します.i行目は、ニンニク君が番号iのところまで、どのくらいのところを通る必要があるかを示します.サンプル入力5 5 2 1 2 3 3 4 3 5サンプル出力1 0 1 2
ACコード
#include 
#include 
#include 
#include 
#include 
using namespace std;
vector<int>biao[1010];
int d[1010];
queue<int>q;

void bfs(int cur)
{
    q.push(cur);
    d[cur]=0;
    while(!q.empty())
    {
        int tmp=q.front();
        q.pop();
        int sz=biao[tmp].size() ;
        for(int i=0;iif(d[biao[tmp][i]]==-1){
            q.push(biao[tmp][i]);
            d[biao[tmp][i]]=d[tmp]+1;
        }
        }
    }
    return;
}

int main()
{
    memset(d,-1,sizeof(d));
    int m,n,c;
    cin>>n>>m>>c;
    while(m--)
    {
        int a,b;
        cin>>a>>b;
        biao[a].push_back(b);
        biao[b].push_back(a);
    }
    bfs(c);
    for(int i=1;i<=n;i++)
    {
        cout<"
"; } return 0; }