• 大小: 371KB
    文件类型: .gz
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: 其他
  • 标签: 最短路径  gtk  flody  

资源简介

用gtk+2.0开发的一个小程序,用来显示最短路径,前台界面用gtk+2.0开发,后台用flody算法,支持手工画图,动态修改图的结构,包括修改顶点、边长等等,可以在界面上显示任意两点之间的最短路径,可以在图上画出来,用不同的颜色显示。程序用eclipse开发,可以在linux(fedora13)下运行,也可以到window下编译运行。

资源截图

代码片段和文件信息

/*
 * floyd.c
 *
 *  Created on: 2011-3-4
 *      Author: root
 */
#include “graph.h“
#include 
#include 
#include 
#include 
#include 
extern struct graph_struct *my_graph;
unsigned int malloc_error()
{
printf(“malloc error:not enough_memory\n“);
//后期改进:弹出对话框,在界面提示。
return 1;
}

int init_array_double(double ***array unsigned int base)
{
unsigned int i = 0;
unsigned int j = 0;
//申请空间,构造动态二维数组
*array = (double **) malloc(sizeof(double*) * base);
if (*array)
{
memset(*array 0 sizeof(double *) * base);
for (i = 0; i < base; ++i)
{
(*array)[i] = (double *) malloc(sizeof(double) * base);
if ((*array)[i])
{
memset((*array)[i] 0 sizeof(double) * base);
} else
{
printf(“malloc error:not enough memory\n“);
return 1;
}
}
} else
{
printf(“malloc error:not enough memory\n“);
return 1;
}
for (i = 0; i < base; ++i)
for (j = 0; j < base; ++j)
if (i == j)
(*array)[i][j] = 0;
else
(*array)[i][j] = DBL_MAX;
return 0;
}

int init_array_int(unsigned int ***array unsigned int base)
{
unsigned int i = 0;
unsigned int j = 0;
//申请空间,构造动态二维数组
*array = (unsigned int **) malloc(sizeof(unsigned int*) * base);
if (*array)
{
memset(*array 0 sizeof(unsigned int *) * base);
for (i = 0; i < base; ++i)
{
(*array)[i] = (unsigned int *) malloc(sizeof(unsigned int) * base);
if ((*array)[i])
{
memset((*array)[i] 0 sizeof(unsigned int) * base);
} else
{
printf(“malloc error:not enough memory\n“);
return 1;
}
}
} else
{
printf(“malloc error:not enough memory\n“);
return 1;
}
for (i = 0; i < base; ++i)
for (j = 0; j < base; ++j)
{
(*array)[i][j] = INT_MAX;
}
return 0;
}

unsigned int init_graph()
{
my_graph = (struct graph_struct *) malloc(sizeof(struct graph_struct));
if (!my_graph)
return malloc_error();
memset(my_graph 0 sizeof(struct graph_struct));
my_graph->point_cur_num = 0;
my_graph->side_cur_num = 0;
my_graph->point_max_num = 10;/*初始10个顶点*/
my_graph->side_max_num = my_graph->point_max_num * (my_graph->point_max_num + 1) / 2;
my_graph->graph_point = (struct graph_point *) malloc(sizeof(struct graph_point) * my_graph->point_max_num);
if (!my_graph->graph_point)
return malloc_error();
memset(my_graph->graph_point 0 sizeof(struct graph_point) * my_graph->point_max_num);
my_graph->graph_side = (struct graph_side *) malloc(sizeof(struct graph_side) * my_graph->side_max_num);
if (!my_graph->graph_side)
return malloc_error();
memset(my_graph->graph_side 0 sizeof(struct graph_side) * my_graph->side_max_num);
return 0;
}

/**
 * 函数名称: flody
 * 函数参数: graph图的邻接矩阵,min_path 最短路径长度,n顶点个数,path路径矩阵
 * 函数功能: 求解任意顶点间的最短路径长度和路径经过的顶点
 * 返回值: 无
 * */
void flody(double **graph double **min_path unsigned n unsigned int **path)
{
unsigned int i = 0 j = 0 k = 0;
for (i = 0; i < n; ++i)
for (j = 0; j < n; ++j)
{
min_path[i][j] = graph[i][j];
path[i][j] = 0;
}
for (k = 0;

评论

共有 条评论