题目20 吝啬的国度

来源:互联网 发布:mac倩女幽魂手游 编辑:程序博客网 时间:2024/05/21 17:02

建图是关键,,C++提供的STL很好用vector容器,vector<int>map 建立名为map,类型为int的一维动态数组,可以扩容,vector<int>map[10]  建立10行,列数不限的二维数组,由题意可知,遍历图时需要保存其父节点即可,所以pri[]是用来存放父节点的数组

 //深搜,存储父节点的编号,C++STL  vector存储图,邻接表形式#include<iostream>#include<cstdlib>#include<cstring>#include<vector>using namespace  std;int pre[100005];//用于存储父亲节点,数组下标为当前节点标号,存放其父节点vector<int>v[100005];//vector容器建立v数组void dfs(int s){//图的深搜for(int i=0;i<v[s].size();i++){if(!pre[v[s][i]]){pre[v[s][i]]=s;dfs(v[s][i]);}}}int main(){int M;cin>>M;while(M--){int N,S;memset(pre,0,sizeof(pre));memset(v,0,sizeof(v));cin>>N>>S;pre[S]=-1;for(int i=0;i<N-1;i++){//建立无向图int x,y;cin>>x>>y;v[x].push_back(y);v[y].push_back(x);}dfs(S);//从输入的起始位置开始搜索for(int i=1;i<=N;i++)cout<<pre[i]<<' ';cout<<endl;}//system("pause");return 0;}        


原创粉丝点击