2013-11-19 图专题之02Floyd算法(动态规划题)

来源:互联网 发布:mac上安装nodejs 编辑:程序博客网 时间:2024/06/11 10:48

题目

程序实现Floyd算法


注意事项

注意思想和趟数


复杂度

时间复杂度

O(n*n*n)

空间复杂度

O(n*n)


程序实现

#include<stdio.h>#include<stdlib.h>int vertix_num;int **graph_weight;int **graph_distance;void output_graph(){int i;int j;for( i = 0; i < vertix_num;i++){for(j = 0; j < vertix_num; j++){printf("%-4d ", graph_weight[i][j]);}printf("\n");}}void output_distance(){int i;int j;for( i = 0; i < vertix_num;i++){for(j = 0; j < vertix_num; j++){printf("%-4d ", graph_distance[i][j]);}printf("\n");}printf("\n");}void exec_alg(){int k;int i;int j;for( k = 0; k < vertix_num;k++){for( i = 0; i < vertix_num;i++){for(j = 0; j < vertix_num; j++){if(i==j || i == k || k==j){continue;}if(graph_distance[i][j] > graph_distance[i][k] + graph_distance[k][j]){//printf("123\n");graph_distance[i][j] = graph_distance[i][k] + graph_distance[k][j];//printf("123\n");}}}//output_distance();}}void produce_the_graph(){graph_weight = (int  **)malloc(sizeof(int *) * vertix_num);graph_distance = (int  **)malloc(sizeof(int *) * vertix_num);int i;for(i = 0; i < vertix_num; i++){graph_weight[i] = (int  *)malloc(sizeof(int ) * vertix_num);graph_distance[i] = (int  *)malloc(sizeof(int ) * vertix_num);}int j;for(i = 0; i < vertix_num; i++){for(j = 0; j< vertix_num; j++){scanf("%d", &graph_weight[i][j]);graph_distance[i][j] = graph_weight[i][j];}}}void free_mem(){int i;for(i = 0; i < vertix_num; i++){free(graph_weight[i]);free(graph_distance[i]);}free(graph_weight);free(graph_distance);}int main(void){printf("1000 means +OO\n");scanf("%d", &vertix_num);produce_the_graph();exec_alg();printf("\nthe minest distance arry is :\n");output_distance();free_mem();}


	
				
		
原创粉丝点击