D - How far away ?
题目:

题目网址:Problem - 2586 (hdu.edu.cn)
思路:
一个村庄有n个房子,要求m次i,j距离;
首先把路都存储在栈组里,
在对每一次输入的i,j进行dfs搜索累加路径距离输出结果;
代码实现:
#include<stdio.h> #include<vector> #include<string.h> #include<iostream> using namespace std; struct bian//存储道路通行那以及长度 { int pos; int val; }q; const int maxn=40005; vector<struct bian>a[maxn]; int n,m,flag,e,vis[maxn]; void DFS(int s,int ans) { int size,i; if(vis[s]) return ;//防止重复 if(flag) return ;//输出答案后退出 if(s==e)//如果到该节点,输出结果,标记已输出 { cout<<ans<<endl; flag=1; return; } if(a[s].empty()) return ;//如果这条路为死路则返回 else { vis[s]=1; size=a[s].size(); for(i=0;i<size;i++)//对每一条进行尝试 DFS(a[s][i].pos,ans+a[s][i].val); vis[s]=0; } } int main() { int t; cin>>t; while(t--) { int i,j,x,y,z; cin>>n>>m; for(i=0;i<n-1;i++) { cin>>x>>y>>z;//输入道路以及长度,存储在栈组里 q.pos=y;q.val=z; a[x].push_back(q); q.pos=x;q.val=z; a[y].push_back(q); } for(j=0;j<m;j++) { memset(vis,0,sizeof(vis)); flag=0; int s; cin>>s>>e; DFS(s,0); } for(i=0;i<n;i++) { a[i].clear();//对栈组进行清零 } } return 0; }

浙公网安备 33010602011771号