CH6_5.C
上传用户:lgb298
上传日期:2013-03-22
资源大小:1025k
文件大小:1k
源码类别:

软件工程

开发平台:

C/C++

  1. #include <stdio.h>
  2. #define M 10
  3. #define MAX 100
  4. void shortpath_DIJ(int ad[][M],int k,int pre[],
  5.                    int dist[],int n)
  6. {  int i,j,p,wm;
  7.    k=k-1;
  8.    for(i=0;i<n;i++)
  9.    {  dist[i]=ad[k][i];
  10.       if(dist[i]<MAX)  pre[i]=k+1;
  11.       else             pre[i]=0;
  12.    }
  13.    pre[k]=0; dist[k]=0; ad[k][k]=1;
  14.    for(j=0;j<(n-1);j++)
  15.    {  wm=MAX;  p=-1;
  16.       for(i=0;i<n;i++)
  17.          if((ad[i][i]==0)&&(dist[i]<wm))
  18.          {   p=i;
  19.              wm=dist[i];
  20.          }
  21.       if(p==-1)  break;
  22.       else{  ad[p][p]=1;
  23.              for(i=0;i<n;i++)
  24.                 if(ad[i][i]==0)
  25.                    if(dist[p]+ad[p][i]<dist[i])
  26.                    {  dist[i]=dist[p]+ad[p][i];
  27.                       pre[i]=p+1;
  28.                    }
  29.           }
  30.    }
  31. }
  32. void main()
  33. {   int n=7,i,j,k=1;
  34.     static int ad[][M]={{0  ,13 ,8  ,MAX,30 ,MAX,32},
  35. {MAX,0  ,MAX,MAX,MAX,9  ,7 },
  36. {MAX,MAX,0  ,5  ,MAX,MAX,MAX},
  37. {MAX,MAX,MAX,0  ,6  ,MAX,MAX},
  38. {MAX,MAX,MAX,MAX,0  ,2  ,MAX},
  39. {MAX,MAX,MAX,MAX,MAX,0  ,17},
  40. {MAX,MAX,MAX,MAX,MAX,MAX,0}};
  41.     static int pre[M],dist[M];
  42.     shortpath_DIJ(ad,k,pre,dist,n);
  43.     for(i=0;i<n;i++)
  44.     {  for(j=0;j<n;j++)
  45.  printf("%-6d",ad[i][j]);
  46.        printf("n");
  47.     }
  48.     for(i=0;i<n;i++)
  49.       printf("%d  ",dist[i]);
  50.     printf("n");
  51.     for(i=0;i<n;i++)
  52.       printf("%d  ",pre[i]);
  53. }