注册 登录
编程论坛 C++教室

不知道什么哪里的问题求各位大大解啊,,

lzxb520 发布于 2013-01-03 00:53, 217 次点击
#include<stdio.h>
#define max 99


void dijkstra(int a[][],int k,int pre[],int dist[],int n)
{
    int i,j,p,min;
   
    for(i=0;i<n;i++)
    {
        dist[i]=a[k][i];
        if(dist[i]<max)
            pre[i]=k;
        else
            pre[i]=0;
    }
    pre[k]=0;
    dist[k]=0;
    a[k][k]=1;
    for(p=0;p<n-1;p++)
    {
        min=max;
        j=-1;
        for(i=0;i<n;i++)
            if(a[i][i]==0&&dist[i]<min)
            {
                j=i;
                min=dist[i];
            }
        if(j==-1)
            break;
        else
        {
            a[j][j]=1;
            for(i=0;i<n;i++)
                if(a[i][i]==0&&(min+a[j][i]<dist[i]))
                {
                    dist[i]=min+a[j][i];
                    pre[i]=j;
                }
        }
     }
}

void main()
{
    int b[3][3]={{0,1498,2151},{1498,0,2313},{2151,2313,0}};
    int pre[3];
    int dist[3];
    int i;
    dijkstra(b[3][3],1,pre,dist,3);
    for(i=0;i<3;i++)
    {
        printf("%d\n",pre[i]);
        printf("%d\n",dist[i]);
    }
}
2 回复
#2
yuccn2013-01-03 01:07
红色的为修改的地方。

#include<stdio.h>
 #define max 99


void dijkstra(int a[3][3],int k,int pre[],int dist[],int n)
 {
     int i,j,p,min;
     
    for(i=0;i<n;i++)
     {
         dist[i]=a[k][i];
         if(dist[i]<max)
             pre[i]=k;
         else
             pre[i]=0;
     }
     pre[k]=0;
     dist[k]=0;
     a[k][k]=1;
     for(p=0;p<n-1;p++)
     {
         min=max;
         j=-1;
         for(i=0;i<n;i++)
             if(a[i][i]==0&&dist[i]<min)
             {
                 j=i;
                 min=dist[i];
             }
         if(j==-1)
             break;
         else
         {
             a[j][j]=1;
             for(i=0;i<n;i++)
                 if(a[i][i]==0&&(min+a[j][i]<dist[i]))
                 {
                     dist[i]=min+a[j][i];
                     pre[i]=j;
                 }
         }
      }
 }
 
void main()
 {
     int b[3][3]={{0,1498,2151},{1498,0,2313},{2151,2313,0}};
     int pre[3];
     int dist[3];
     int i;
     dijkstra(b,1,pre,dist,3);
     for(i=0;i<3;i++)
     {
         printf("%d\n",pre[i]);
         printf("%d\n",dist[i]);
     }
 }
#3
lzxb5202013-01-03 01:13
回复 2楼 yuccn
嗯已经好了!
非常感谢哈
1