资源简介
并行Dijkstra最短路径算法,附有测试文件

代码片段和文件信息
/**输入邻接矩阵和源顶点,求最短路径。输入邻接矩阵中,位置(xy)为顶点y到x的边权**/
#include
#include
#include
#include
/**定义M为无穷大**/
#define M 1.7e308
#define BOOL int
#define FALSE 0
#define TRUE 1
#define W(xy) W[x*nodenum+y]
FILE* fp;
char ch;
char id[20];
int point;
double* W;
double* dist;
BOOL* bdist;
int nodenum = 0;
int S = 0;
/* show err and exit*/
void fatal(char* err)
{
printf(“%s/n“ err);
exit(0);
}
/**从文件中读取字符**/
void GetChar()
{
fread(&chsizeof(char)1fp);
}
/**读取一个小数,如果为字符M或m,令其值为无穷大**/
double GetNextNum()
{
double num;
while(!isdigit(ch) && ch!=‘M‘ && ch!=‘m‘)
GetChar();
if(isdigit(ch))
{
point = 0;
while(isdigit(ch))
{
id[point] = ch;
point ++;
GetChar();
}
id[point] = 0;
num = atof(id);
}else{
num = M;
GetChar();
}
return num;
}
/**读入邻接矩阵**/
void ReadMatrix()
{
char file[40];
int ij;
double num;
printf(“Begin to read the matrix!\n“);
printf(“The first integer of the file should be the size of the matrix!\n“);
printf(“Input the file name of the matrix:“);
scanf(“%s“file);
if((fp = fopen(file“r“)) == NULL)
{
fatal(“File name input error!“);
}
num = GetNextNum();
if(num < 0 || num > 10000)
{
fclose(fp);
fatal(“The matrix row input error!“);
}
nodenum = (int)num;
printf(“Input the start node:“);
scanf(“%d“&S);
if(S >= nodenum) fatal(“The start node input too big!\n“);
W = (double*)malloc(sizeof(double)*num*num);
if( W == NULL)
{
fclose(fp);
fatal(“Dynamic allocate space for matrix fail!“);
}
for(i=0;i for(j=0;j {
W(ij) = GetNextNum();
}
fclose(fp);
printf(“Finish reading the matrixthe nodenum is: %d;\n“nodenum);
}
/**各处理器数据初始化**/
void Init(int my_rankint group_sizeint ep)
{
int i;
MPI_Status status;
if(my_rank == 0)
{
for(i=1;i {
MPI_Send(&W(ep*(i-1)0)ep*nodenumMPI_DOUBLEiiMPI_COMM_WORLD);//向各个处理器传送所需要的邻接矩阵块
}
}else{
dist = (double*)malloc(sizeof(double)*ep);
bdist = (int*) malloc(sizeof(BOOL)*ep);
W = (double*)malloc(sizeof(double)*ep*nodenum);
if(W == NULL || dist == NULL || bdist == NULL)
fatal(“Dynamic allocate space for matrix fail!“);
MPI_Recv(Wep*nodenumMPI_DOUBLE0my_rankMPI_COMM_WORLD&status);//接收各自所需要的邻接矩阵块
/*
初始化dist和bdist
*/
for(i=0;i {
if(i+(my_rank-1)*ep == S)
{
dist[i] = 0;
bdist[i] = TRUE;
}else{
dist[i] = W(iS);
bdist[i] = FALSE;
}
}
}
}
/**输出邻接矩阵**/
void OutPutMatrix(int my_rankint group_sizeint epint mynum)
{
int ij;
if(my_rank != 0)
{
for(i=0;i {
printf(“Processor %d:\t“my_rank);
for(j=0;j {
if(W(ij) > 1000000) printf(“M\t“);
else printf(“%d\t“(int)W(ij));
}
printf(“\n“);
}
}
}
/**输出结果**/
void OutPutResult(int my_rankint group_sizeint epint mynum)
{
int ij;
if(my_rank != 0)
{
for(i=0;i {
printf(“node %d:\t%d\n“(my_rank-1)*ep+i(int)dist[i]);
}
}
}
/**算法主循环**/
void FindMi
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 352 2009-08-13 23:51 并行dijkstra最短路径算法\readme.txt
文件 7775 2009-08-13 15:10 并行dijkstra最短路径算法\shortest.c
文件 8074 2009-08-13 23:05 并行dijkstra最短路径算法\ShortestEnhance.c
文件 40448 2009-08-13 23:17 并行dijkstra最短路径算法\并行dijkstra最短路径算法.doc
文件 30104 2003-07-14 02:22 并行dijkstra最短路径算法\测试数据\1.txt
文件 31650 2003-07-14 02:22 并行dijkstra最短路径算法\测试数据\1result.txt
文件 60104 2003-07-14 02:22 并行dijkstra最短路径算法\测试数据\2.txt
文件 31607 2003-07-14 02:22 并行dijkstra最短路径算法\测试数据\2result.txt
文件 90104 2003-07-14 02:22 并行dijkstra最短路径算法\测试数据\3.txt
文件 31583 2003-07-14 02:22 并行dijkstra最短路径算法\测试数据\3result.txt
文件 120104 2003-07-14 02:22 并行dijkstra最短路径算法\测试数据\4.txt
文件 31587 2003-07-14 02:22 并行dijkstra最短路径算法\测试数据\4result.txt
文件 150104 2003-07-14 02:22 并行dijkstra最短路径算法\测试数据\5.txt
文件 31593 2003-07-14 02:22 并行dijkstra最短路径算法\测试数据\5result.txt
文件 180104 2003-07-14 02:22 并行dijkstra最短路径算法\测试数据\6.txt
文件 31561 2003-07-14 02:22 并行dijkstra最短路径算法\测试数据\6result.txt
文件 210104 2003-07-14 02:22 并行dijkstra最短路径算法\测试数据\7.txt
文件 31559 2003-07-14 02:22 并行dijkstra最短路径算法\测试数据\7result.txt
文件 240104 2003-07-14 02:22 并行dijkstra最短路径算法\测试数据\8.txt
文件 31586 2003-07-14 02:22 并行dijkstra最短路径算法\测试数据\8result.txt
文件 270104 2003-07-14 02:22 并行dijkstra最短路径算法\测试数据\9.txt
文件 31613 2003-07-14 02:22 并行dijkstra最短路径算法\测试数据\9result.txt
文件 300104 2003-07-14 02:22 并行dijkstra最短路径算法\测试数据\a.txt
文件 31598 2003-07-14 02:22 并行dijkstra最短路径算法\测试数据\aresult.txt
文件 371 2003-07-14 02:22 并行dijkstra最短路径算法\测试数据\readme.txt
目录 0 2009-08-21 14:05 并行dijkstra最短路径算法\测试数据
目录 0 2010-08-19 10:25 并行dijkstra最短路径算法
----------- --------- ---------- ----- ----
2023997 27
............此处省略0个文件信息
- 上一篇:小功率调频发射机设计报告
- 下一篇:.net文件的分割与合并处理
相关资源
- 西安电子科技大学 并行计算 霍红卫
- 路由选择算法源程序(最短路径算法
- 基于遗传算法的排课系统
- 基于LabVIEW的并行数据采集系统设计
- 基于FPGA的快速并行FFT及应用
- CC2530的分布式无线数据采集系统设计
- 达梦DM产品白皮书包含共享集群,交换
- 基于Spark的PSO并行计算
- pso并行化算法.rar
- 矩阵相乘并行设计
- 整理最全资料:并行计算大作业:矩
- 74HC595 - 串行转并行
- 三维可压缩流场MPI+OpenMP混合并行算法
- 一种并行计算通信优化策略
- FFT并行MPI实现
- 交通咨询模拟系统
- 有限元结构分析并行计算.pdf
- 16位补码并行加法器含减法器实验
- 高性能并行计算.zip
- Dijkstra算法最短路的可视化实现
- A*DijkstraBFS路径搜寻算法演示程序
- R并行编程实战
- 基于STM32的AD9851并行源代码
- 最短路径数据结构作业-南京地图
- 并行多机调度问题
- 计算流体力学及其并行算法
- 并行计算——结构·算法·编程修订版
- 中科院课程 高性能并行计算课件,程
- 并行flash FPGA读写测试,Verilog语言
- FPGA并行驱动AD9850verilog
评论
共有 条评论