How far away ?

这题 明显的水题,一次编译就测试出来数据了..好吧,太简单了...

但我还是错了..

这题我 用 MAP[40005][40005]数组调试的时候发现秒退问题.

因为以前经历过类似的,所以一下子就知道问题了;

以前看过过VECTOR的方法,所以我也改用向量问题;

完美解决..

 1 #include<iostream>  
 2 #include<vector>  
 3 #include<string.h>  
 4 using namespace std;  
 5 struct node  
 6 {  
 7     int pos;  
 8     int val;  
 9 }temp,q;  
10 vector<node>a[40005];  
11 int n,m,flag,e,vis[40005];  
12 void DFS(int s,int ans)  
13 {  
14     //printf("s=%d
",s);  
15     int size,i;  
16     if(vis[s]) return ;  //不访问重复的点
17     if(flag) return ;   //找到了就不继续找了;
18     if(s==e) {printf("%d
",ans);flag=1;return;}  
19      if(a[s].empty())  return ;  
20      else  
21      {  
22       vis[s]=1;  
23      size=a[s].size();  
24      for(i=0;i<size;i++)  
25         DFS(a[s][i].pos,ans+a[s][i].val);  
26      vis[s]=0;  
27      }  
28 }  
29 int main()  
30 {  
31     int cas;  
32     scanf("%d",&cas);  
33     while(cas--)  
34     {  
35         int i,j,x,y,z;  
36         scanf("%d %d",&n,&m);  
37         for(i=0;i<n-1;i++)  
38         {  
39                 scanf("%d %d %d",&x,&y,&z);  
40                 q.pos=y;q.val=z;  
41                 a[x].push_back(q);  
42                 q.pos=x;q.val=z;  
43                 a[y].push_back(q);  
44         }  
45         for(j=0;j<m;j++)  
46         {  
47             memset(vis,0,sizeof(vis));  
48             flag=0;  
49             int s;  
50             scanf("%d %d",&s,&e);  
51             DFS(s,0);  
52         }  
53         for(i=0;i<n;i++)  
54         {  
55             a[i].clear();  
56         }  
57     }  
58       return 0;  
59 }  
原文地址:https://www.cnblogs.com/xiaoniuniu/p/4053436.html