0
点赞
收藏
分享

微信扫一扫

求任意两个顶点的最短通路长度

WikongGuan 2022-05-01 阅读 58

求图1所示的图G中的任意两个顶点的最短通路长度。

 

#include <stdio.h>

int main() 
{
	int e[10][10],p[10][10]={0};
	int k,i,j;
	for(i = 1;i <= 6;i++)
    {
        for(j = 1;j <= 6;j++)
        {
            e[i][j] = 10000;
        }
    }
    /*初始化边的长度*/
	e[1][2] = e[2][1] = 1;
	e[1][4] = e[4][1] = 2;
	e[2][4] = e[4][2] = 4;
	e[2][3] = e[3][2] = 3;
	e[3][4] = e[4][3] = 1;
	e[3][5] = e[5][3] = 2;
	e[3][6] = e[6][3] = 2;
	e[5][6] = e[6][5] = 2;
	e[4][5] = e[5][4] = 3;
	e[1][1]=e[2][2]=e[3][3]=e[4][4]=e[5][5]=e[6][6]=0;
	printf("A0:\n");//初始状态
    for(i = 1;i <= 6;i++)
    {
        for(j = 1;j <= 6;j++)
        {
            if(e[i][j]==10000)
            printf("    #");//#用来表示无穷大
            else
            printf("%5d",e[i][j]);
        }
        printf("\n");
    }
	for(k = 1;k <= 6;k++)
	{
	    for(i = 1;i <= 6;i++)
	    {
	        for(j = 1;j <= 6;j++)
	        {
	            if(i!=j)
	            {
	                if(e[i][j] > e[i][k]+e[k][j])
	                {
	                    e[i][j] = e[i][k]+e[k][j];
	                    p[i][j] = k;
	                }
	            }
	        }
	    }
	    printf("A%d:\n",k);
	    for(i = 1;i <= 6;i++)
	    {
	        for(j = 1;j <= 6;j++)
	        {
	            if(e[i][j]==10000)
                printf("    #");
                else
	            printf("%5d",e[i][j]);
	        }
	        printf("\n");
	    }

	    for(i = 1;i <= 6;i++)
	    {
	        for(j = 1;j <= 6;j++)
	        {
	            if(p[i][j]==k)
	            printf("p[%d %d]=%d\n",i,j,p[i][j]);
	        }
	    }
	    printf("\n");
	}

	return 0;
}

A6即为最终所求

举报

相关推荐

0 条评论