码迷,mamicode.com
首页 > 其他好文 > 详细

hdu1142

时间:2015-05-02 11:03:53      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:

题意看错 晕呐

 1 /***hdu1142
 2 dijskra+dfs
 3 ***/
 4 #include<stdio.h>
 5 #include<string.h>
 6 #define maxint 99999999
 7 int map[1003][1003],n,m,flag;
 8 int mark[1003],dis[1003];
 9 int dijskra(int s)
10 {
11     int i,j,pos;
12     int vis[1000];
13     memset(vis,0,sizeof(vis));
14     for(i=1;i<=n;i++)
15     {
16         dis[i]=map[s][i];
17     }
18     dis[s]=0;
19     vis[s]=1;
20     pos=s;
21     for(i=1;i<n;i++)
22     {
23         pos=s;
24         int minn=maxint;
25         for(j=1;j<=n;j++)
26         {
27             if(!vis[j]&&minn>dis[j])
28             {
29                 minn=dis[j];
30                 pos=j;
31             }
32         }
33         vis[pos]=1;
34         for(j=1;j<=n;j++)
35         {
36             if(!vis[j]&&(dis[j]>map[pos][j]+dis[pos]))
37             {
38                 dis[j]=map[pos][j]+dis[pos];
39             }
40         }
41     }
42     return dis[1];
43 }
44 int dfs(int x)
45 {
46     if(x==2)
47     { 
48         return 1; 
49     }
50     if(mark[x])  return mark[x];  
51     for(int i=1;i<=n;i++)
52     {
53         
54         if(i!=x&&dis[i]<dis[x]&&map[x][i]!=maxint)
55         {
56             mark[x]+=dfs(i);//mark[]存储当前几个点
57         }
58     }
59     return mark[x];
60 } 
61 int main()
62 {
63     int i,j;
64     while(scanf("%d%d",&n,&m)!=EOF)
65     {
66         if(!n)
67             break;
68         for(j=0;j<=n;j++)
69             for(i=0;i<=n;i++)
70             {
71                 if(i==j)map[i][j]=0;
72                 else
73                 {
74                     map[j][i]=maxint;
75                     map[i][j]=maxint;
76                 }
77             }
78         for(i=0;i<m;i++)
79         {
80             int x,y,z;
81             scanf("%d%d%d",&x,&y,&z);
82             map[x][y]=z;map[y][x]=z;
83         }
84         memset(mark,0,sizeof(mark));
85         dijskra(2);//因为题意:若B到终点的距离小于A到终点的距离,那么就走B,所以要倒着找出他们的路径
86         int ans=dfs(1);
87         printf("%d\n",ans);
88     }
89 }

 

hdu1142

标签:

原文地址:http://www.cnblogs.com/sweat123/p/4471569.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!