程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 題目20: 吝啬的國度

題目20: 吝啬的國度

編輯:C++入門知識

吝啬的國度 時間限制:1000 ms  |  內存限制:65535 KB 難度:3 描述 在一個吝啬的國度裡有N個城市,這N個城市間只有N-1條路把這個N個城市連接起來。現在,Tom在第S號城市,他有張該國地圖,他想知道如果自己要去參觀第T號城市,必須經過的前一個城市是幾號城市(假設你不走重復的路)。  輸入 第一行輸入一個整數M表示測試數據共有M(1<=M<=5)組 每組測試數據的第一行輸入一個正整數N(1<=N<=100000)和一個正整數S(1<=S<=100000),N表示城市的總個數,S表示參觀者所在城市的編號 隨後的N-1行,每行有兩個正整數a,b(1<=a,b<=N),表示第a號城市和第b號城市之間有一條路連通。 輸出 每組測試數據輸N個正整數,其中,第i個數表示從S走到i號城市,必須要經過的上一個城市的編號。(其中i=S時,請輸出-1) 樣例輸入 1 10 1 1 9 1 8 8 10 10 3 8 6 1 2 10 4 9 5 3 7 樣例輸出 -1 1 10 10 9 8 3 1 1 8 來源 經典題目         [cpp] *********************************  *   日期:2013-3-26  *   作者:SJF0115  *   題號: 題目20: 吝啬的國度  *   來源:http://acm.nyist.net/JudgeOnline/problem.php?pid=20  *   結果:AC  *   來源:南陽理工OJ  *   總結:  **********************************/   #include<stdio.h>    #include<iostream>    #include<vector>    #include<string.h>    using namespace std;      vector<int> G[100001];   int preCity[100001];   int vis[100001];   //深搜    void DFS(int location){       vis[location] = 1;       //訪問與location相連的城市        for(int i = 0;i < G[location].size();i++){           int v = G[location][i];           if(!vis[v]){               //存儲訪問城市的上一站                preCity[v] = location;               //printf("%d %d\n",location,v);                DFS(v);           }       }   }       int main ()   {       int N,M,City,Location,a,b,i,first;       //freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin);          scanf("%d",&N);       while (N--){           scanf("%d %d",&City,&Location);           //初始化            for(i = 1;i <= City;i++){               G[i].clear();           }           //輸入路徑            for(i = 1;i < City;i++){               scanf("%d %d",&a,&b);               G[a].push_back(b);               G[b].push_back(a);           }           //訪問城市            memset(vis,0,sizeof(vis));           vis[Location] = 1;           preCity[Location] = -1;           DFS(Location);           //輸出訪問城市的上一站            first = 1;           for(i = 1;i <= City;i++){               if(first){                   first = 0;               }               else{                   printf(" ");               }               printf("%d",preCity[i]);           }           printf("\n");       }       return 0;   }               /********************************* *   日期:2013-3-26 *   作者:SJF0115 *   題號: 題目20: 吝啬的國度 *   來源:http://acm.nyist.net/JudgeOnline/problem.php?pid=20 *   結果:AC *   來源:南陽理工OJ *   總結: **********************************/ #include<stdio.h> #include<iostream> #include<vector> #include<string.h> using namespace std;   vector<int> G[100001]; int preCity[100001]; int vis[100001]; //深搜 void DFS(int location){ vis[location] = 1; //訪問與location相連的城市 for(int i = 0;i < G[location].size();i++){ int v = G[location][i]; if(!vis[v]){ //存儲訪問城市的上一站 preCity[v] = location; //printf("%d %d\n",location,v); DFS(v); } } }   int main () { int N,M,City,Location,a,b,i,first; //freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin);   scanf("%d",&N); while (N--){ scanf("%d %d",&City,&Location); //初始化 for(i = 1;i <= City;i++){ G[i].clear(); } //輸入路徑 for(i = 1;i < City;i++){ scanf("%d %d",&a,&b); G[a].push_back(b); G[b].push_back(a); } //訪問城市 memset(vis,0,sizeof(vis)); vis[Location] = 1; preCity[Location] = -1; DFS(Location); //輸出訪問城市的上一站 first = 1; for(i = 1;i <= City;i++){ if(first){ first = 0; } else{ printf(" "); } printf("%d",preCity[i]); } printf("\n"); } return 0; }        

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved