资源简介
包含图论众多热点问题:最短路径——Dijkstra SPFA Floyd等
最小生成树的两种计算方法、三种中心度、连通分量的计算
输入文件格式按照graph_movie.txt
代码片段和文件信息
#include “StdAfx.h“
#include “Algorithm.h“
///////////////////////////////////////////////////////////
////打开文件,存储图为AG,若打开失败则返回false
///////////////////////////////////////////////////////////
bool CreateGraph(Graph* AG char* filePath)
{
FILE* fp;
fp = fopen(filePath “r“);
if (fp == NULL)
{
return false;
}
fscanf(fp “%d%d\n“ &AG->vertex &AG->edge);//记录顶点数n、边数e
int a b;
double c;
AG->length = new double*[AG->vertex + 1];
AG->connect = new int*[AG->vertex + 1];
AG->adjoin = new vector[AG->vertex + 1];
AG->inGraph = new int[AG->vertex + 1];
for (int i = 0; i <= AG->vertex; i++) //权矩阵初始化
{
AG->length[i] = new double[AG->vertex + 1];
AG->connect[i] = new int[AG->vertex + 1];
AG->inGraph[i] = 0;
for (int j = 0; j <= AG->vertex; j++)
{
if (i == j)
AG->length[i][j] = 0;
else
AG->length[i][j] = Infinite_Length;
AG->connect[i][j] = 0;
}
}
while (fscanf(fp “%d %d %lf\n“&a &b &c) != EOF)//无向图
{
AG->length[a][b] = c;
AG->length[b][a] = c;
AG->inGraph[a] = 1;
AG->inGraph[b] = 1;
AG->adjoin[a].push_back(b);
AG->adjoin[b].push_back(a);
AG->connect[a][b] = 1;
AG->connect[b][a] = 1;
}
return true;
}
////////////////////////////////////////////////////////////
///////////是否已选取过每一个点//////////////////////////////
///////////////////////////////////////////////////////////
bool allPicked(int arr[] int n)
{
for (int i = 0; i <= n; i++)
{
if (arr[i] == 0)
return false;
else
continue;
}
return true;
}
///////////////////////////////////////////////////////////
///////Dijkstra算法;path用于存储最短路径////////////////////
///////////////////////////////////////////////////////////
double Dijkstra(Graph* AG int origin int path[])
{
int* S = new int[AG->vertex + 1]; //标记图中的点,若已找到距离原点最短路径,则标记为1,否则为0
double* path_length = new double[AG->vertex + 1]; //记录各点到达原点的最短距离
for (int i = 0; i <= AG->vertex; i++)
{
S[i] = 0; //S初始化为0
path_length[i] = Infinite_Length; //最短距离初始化为无穷大
path[i] = origin;
}
S[origin] = 1; //原点标记为1
path_length[origin] = 0;
for(int i = 0; i <= AG->vertex; i++) //令path_length为各点到原点距离
{
path_length[i] = AG->length[origin][i];
}
int j = 0;
double min_length = Infinite_Length; //最短路径长
int count = AG->vertex + 1;
while(count)
{
count--;
min_length = Infinite_Length;
for (int i = 0; i <= AG->vertex; i++) //求minPi(i)
{
if (S[i] == 1)
continue;
if (path_length[i] < min_length)
{
j = i;
min_length = path_length[i];
}
}
S[j] = 1; //标记找到最短路径的点
if (allPicked(S AG->vertex)) //如果所有点都已标记
break;
for (int i = 0; i <= AG->vertex; i++) //对所有与j相连的节点
{
if (S[i] == 1)
continue;
if (path_length[i] > min_length + AG->length[i][j]) //求min(Pi(i) Pi(j) + wij)
{
path_length[i] = min_length + AG->length[i][j];
path[i] = j;
}
}
}
return 0;
}
////////////////////////////////////////////
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 294400 2013-01-09 10:49 图论算法大全\bin\GraphTest.exe
文件 6073344 2013-01-09 10:49 图论算法大全\bin\GraphTest.pdb
文件 3854326 2012-09-07 21:35 图论算法大全\bin\graph_movie.txt
文件 3854326 2012-09-07 21:35 图论算法大全\graph_movie.txt
文件 891 2012-12-03 23:03 图论算法大全\ShortCut.sln
..A..H. 43008 2013-01-16 20:40 图论算法大全\ShortCut.suo
文件 17172 2013-01-16 20:29 图论算法大全\src\Algorithm.cpp
文件 2377 2013-01-07 13:10 图论算法大全\src\Algorithm.h
文件 4354 2012-12-17 00:08 图论算法大全\src\BetweenCen.cpp
文件 653 2012-12-11 15:04 图论算法大全\src\BetweenCen.h
文件 502 2012-12-07 23:50 图论算法大全\src\CDialog.cpp
文件 354 2012-12-07 23:41 图论算法大全\src\CDialog.h
文件 4323 2012-12-17 00:08 图论算法大全\src\CloseCen.cpp
文件 770 2012-12-11 15:10 图论算法大全\src\CloseCen.h
文件 2093 2013-01-07 20:25 图论算法大全\src\ConnectX.cpp
文件 595 2013-01-07 20:20 图论算法大全\src\ConnectX.h
文件 2116 2013-01-09 10:49 图论算法大全\src\ConnectY.cpp
文件 595 2013-01-07 20:25 图论算法大全\src\ConnectY.h
文件 2576 2013-01-07 20:10 图论算法大全\src\KruskalTree.cpp
文件 627 2013-01-07 20:10 图论算法大全\src\KruskalTree.h
文件 1741 2013-01-07 20:20 图论算法大全\src\PrimDialog.cpp
文件 598 2013-01-06 18:42 图论算法大全\src\PrimDialog.h
文件 3160 2012-12-03 23:03 图论算法大全\src\ReadMe.txt
文件 67777 2009-08-31 02:31 图论算法大全\src\res\ShortCut.ico
文件 672 2012-12-03 23:03 图论算法大全\src\res\ShortCut.rc2
文件 4476 2013-01-07 13:30 图论算法大全\src\resource.h
文件 110000 2013-01-07 20:25 图论算法大全\src\ShortCut.aps
文件 2019 2012-12-03 23:03 图论算法大全\src\ShortCut.cpp
文件 454 2012-12-03 23:03 图论算法大全\src\ShortCut.h
文件 19954 2013-01-07 20:25 图论算法大全\src\ShortCut.rc
............此处省略15个文件信息
- 上一篇:重构 改善既有代码的设计高清无水印.mobi
- 下一篇:360手柄模拟器
相关资源
- 基于Huffman编码的压缩和解压缩小软件
- de2开发板上的万年历
- 纹理合成的图像修复程序
- 管道铺设最优方案
- jsoncpp-src-0.6.0-rc2
- 2/3FEC编码
- 基于自适应窗口的立体匹配
- 随机生成大素数
- gis中最短路径算法的实现
- Qt 雷达图 卫星图
- CTK编译库文件
- 超级玛丽源代码资源包
- cc攻击源码
- 基于QT的象棋游戏
- 串口调试助手十六进制数据转成十进
- VC上用的曲线控件多个
- 满足三角不等式的TSP问题的近似算法
- opengl简单地形绘制
- 试卷生成系统
- eigen库.zip
- 精简版黑白棋demo-Qt
- ArcGIS 9.3 Geoprocessing 模型Model Builder—
- 文本文件字符串的检索和计数KMP算法
- Visual Studio中使用开源二维码QR库libq
- VC++开发的仓库管理系统设计文档和
- dianyajiance.rar
- 华为边缘计算核心板开发帮助手册
- 基于QT的网络视频直播软件
- libcurl+图灵机器人api编写的只能聊天系
- Qt版塔防游戏
评论
共有 条评论