C语言实现,弗洛伊德算法

精简版:

#include <stdio.h>
const int INF = 10000;
int flo[6][6];
int path[6][6];
int before[6][6];
void init()
{
	int i, j;
	for(i = 1;i < 6;i++)
		for(j = 1;j < 6;j++)
			flo[i][j] = (i == j)?0:INF;
	flo[1][2] = 10; flo[1][4] = 30; flo[1][5] = 100;
	flo[2][3] = 50; flo[3][5] = 10; flo[4][3] = 20;
	flo[4][5] = 60;
	
	for(i= 1;i < 6;i++)
		for(j = 1;j < 6;j++){
			path[i][j] = flo[i][j];
			before[i][j] = 0;
		}
	
}

void floyd()
{
	int i, j, k;
	for(k = 1;k < 6;k++)
		for(i = 1;i < 6;i++)
			for(j = 1;j < 6;j++)
				if(path[i][j] > (path[i][k] + path[k][j])){
					path[i][j] = path[i][k] + path[k][j];
					before[i][j] = k;
				
			}

}
void output(int i, int j)
{
	if(i == j)
		return;
	if(before[i][j] == 0)
		printf("%5d", j);
	else
	{
		output(i, before[i][j]);
		output(before[i][j], j);
	}
}
void main()
{
	int m, min;
	init();
	floyd();
	output(1, 5);

	}

#include <stdio.h>
const int INF = 10000;
int flo[6][6];
int path[6][6][6];
int before[6][6];
void init()
{
	int i, j;
	for(i = 1;i < 6;i++)
		for(j = 1;j < 6;j++)
			flo[i][j] = (i == j)?0:INF;
	flo[1][2] = 10; flo[1][4] = 30; flo[1][5] = 100;
	flo[2][3] = 50; flo[3][5] = 10; flo[4][3] = 20;
	flo[4][5] = 60;
	for(i= 1;i < 6;i++)
		for(j = 1;j < 6;j++){
			path[i][j][0] = flo[i][j];
			before[i][j] = 0;
		}
	
}

void floyd()
{
	int i, j, k;
	for(k = 1;k < 6;k++)
		for(i = 1;i < 6;i++)
			for(j = 1;j < 6;j++){
				path[i][j][k] = path[i][j][k-1];
				if(path[i][j][k] > (path[i][k][k-1] + path[k][j][k-1])){
					path[i][j][k] = ((path[i][k][k-1] + path[k][j][k-1]));
					before[i][j] = k;
					
			}}

}

void main()
{
	int m, min;
	init();
	
	floyd();
	for(m = 1;m < 6;m++)
		printf("%d\n", path[1][4][m]);	
}

非精简版

你可能感兴趣的:(C语言实现,弗洛伊德算法)