利用图求最短路径

 
#define N 6
#define M 1<<20
int main()
{
 int i, count, startnode, min, path;
 int dist[N], s[N] = {0}, array[N][N] = {{ 0, 20, 15,  M,  M,  M},
                                      { 2,  0,  4,  M, 10, 30},
           { M,  M,  0,  M,  M, 10},
           { M,  M,  M,  0,  M,  M},
           { M,  M,  M, 15,  0, 10},
           { M,  M,  M,  4,  M,  0}};
 startnode = 0;
 s[startnode] = 1;
 count = 1;
 for (i=0; i<N; i++)
 {
  dist[i] = array[startnode][i];
 }
 while (count < N-1)
 {
  path = M;
  for (i=0; i<N; i++)
  {
   if ((s[i] == 0) && (dist[i] < path))
   {
    path = dist[i];
    min = i;
   }
  }
  s[min] = 1;
  for (i=0; i<N; i++)
  {
   if ((s[i] == 0) && (dist[i] > dist[min] + array[min][i]))
   {
    dist[i] = dist[min] + array[min][i];
   }
  }
  count++;
 }
 for (i=0; i<N; i++)
 {
  printf("V%d -> V%d : %d\n", startnode, i, dist[i]);
 }
 return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值