随笔-19  评论-1  文章-0  trackbacks-0
最简单的dijkstra应用,别的就不说了 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874
#include<stdio.h>
#include
<string.h>
#define MAXN 201
#define MAX 999999
int dist[MAXN][MAXN],x[MAXN];
int main()
{
    
int n,m,i,j,t,s,d,a,b,time,min;
    
while(scanf("%d%d",&n,&m)==2)
    {
        
for(i=0;i<n;i++)
        {
            
for(j=0;j<n;j++)
            {
                
if(i==j)
                    dist[i][j]
=0;
                
else
                    dist[i][j]
=MAX;
            }
        }
        
for(i=0;i<m;i++)
        {
            scanf(
"%d%d%d",&a,&b,&time);
            dist[a][b]
=dist[b][a]=time<dist[a][b]?time:dist[a][b];
        }
        scanf(
"%d%d",&s,&d);
        
for(i=0;i<n;i++)
        x[i]
=dist[s][i];
        dist[s][s]
=1;
        t
=0;
        
while(t!=-1)
        {
            min
=-1;
            t
=-1;
            
for(i=0;i<n;i++)
            
if(dist[i][i]==0&&(min==-1||x[i]<min))
            {
                min
=x[i];
                t
=i;
            }
            
if(t!=-1)
            {
                dist[t][t]
=1;
                
for(i=0;i<n;i++)
                
if(x[i]>x[t]+dist[t][i])
                {
                    x[i]
=x[t]+dist[t][i];
                }
            }
        }
        
if(x[d]<MAX)
            printf(
"%d\n",x[d]);
        
else
            printf(
"-1\n");
    }
    
return 0;
}
posted on 2010-10-06 09:23 孟起 阅读(471) 评论(0)  编辑 收藏 引用 所属分类: 图论

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理