Dijksktra(测试源代码)
1、此程序为c++程序
2、以下代码可实现手动输入,即去掉代码中的/*...*/注释符,并同时去掉赋值代码段
3、源代码
#include<iostream>
using namespace std;
#define MaxInt 32767
#define MVNum 100
typedef struct
{
char vexs[MVNum];
int arcs[MVNum][MVNum], vexnum, arcnum;
}AMGraph;
int LocateVex(AMGraph G, char v);
void Create(AMGraph &G);
void ShortestPath_DIJ(AMGraph G, char vv0, char vv1);
int main()
{
AMGraph G;
char p = 'y', v0 = 'a', v1 = 'f';
while (p == 'y')
{
/*cout << "请输入起点和终点:";
cin >> v0 >> v1;*/
Create(G);
ShortestPath_DIJ(G, v0, v1);
cout << "再次执行请输入:y,不执行请输入:n" << endl;
cin >> p;
}
system("pause");
return 0;
}
//确定结点下标
int LocateVex(AMGraph G, char v)
{
int l, i;
for (l = 0, i = 0; i < G.arcnum; i++)
{
if (v == G.vexs[i])
{
l = i;
}
}
return l;
}
void Create(AMGraph &G)
{
int i, j, k, w;
char v1, v2;
/*cout << "请输入顶点数和边数:";
cin >> G.vexnum >> G.arcnum;
cout << "请输入顶点:";
for (i = 0; i < G.vexnum; i++)
{
cin >> G.vexs[i];
}*/
G.vexnum = 6;
G.arcnum = 8;
G.vexs[0] = 'a';
G.vexs[1] = 'b';
G.vexs[2] = 'c';
G.vexs[3] = 'd';
G.vexs[4] = 'e';
G.vexs[5] = 'f';
//初始化
for (i = 0; i < G.vexnum; i++)
{
for (j = 0; j < G.vexnum; j++)
{
G.arcs[i][j] = MaxInt;
}
}
/*for (k = 0; k < G.arcnum; k++)
{
cout << "请输入边的起点、终点及权值:";
cin >> v1 >> v2 >> w;
i = LocateVex(G, v1);
j = LocateVex(G, v2);
G.arcs[i][j] = w;
}*/
G.arcs[0][2] = 10;
G.arcs[0][4] = 30;
G.arcs[0][5] = 100;
G.arcs[1][2] = 5;
G.arcs[2][3] = 50;
G.arcs[3][5] = 10;
G.arcs[4][3] = 20;
G.arcs[4][5] = 60;
}
//最短路径
void ShortestPath_DIJ(AMGraph G, char vv0, char vv1)
{
int v0, v1, i, j, k, n, v, min, D[MVNum], Path[MVNum], S[MVNum];
char p[MVNum];
v0 = LocateVex(G, vv0);
v1 = LocateVex(G, vv1);
for (i = 0; i < G.vexnum; i++)
{
S[i] = 0;
D[i] = G.arcs[v0][i];
if (D[i] < MaxInt)
{
Path[i] = v0;
}
else
{
Path[i] = -1;
}
}
S[v0] = 1;
D[v0] = 0;
for (i = 1; i < G.vexnum; i++)
{
min = MaxInt;
for (j = 0; j < G.vexnum; j++)
{
if (!S[j] && D[j] < min)
{
v = j;
min = D[v];
}
}
S[v] = 1;
for (j = 0; j < G.vexnum; j++)
{
if (!S[j] && min + G.arcs[v][j] < D[j])
{
D[j] = min + G.arcs[v][j];
Path[j] = v;
}
}
}
//输出最短路径和最短距离
n = 0;
p[n] = G.vexs[v1];
for (k = v1; Path[k] >= 0; k = Path[k])
{
n++;
p[n] = G.vexs[Path[k]];
}
cout << "最短路径:" << p[n];
for (i = n - 1; i > 0; i--)
{
cout << "->" << p[i];
}
cout << "->" << p[i] << endl << "最短路径的距离:" << D[v1] << endl;
}
Dijksktra(测试源代码)的更多相关文章
- 多啦爱梦~多啦A梦CSS3测试源代码
先直接看图片,感觉一下!一直以来,我们都在说浏览器对CSS3支持度这个问题.可是,鉴于知识认识水平问题,又没几个人真正了解CSS3是什么东西,和它在网站显示上的重要性.现在好了,日本某位大神写了个CS ...
- JAVA语言课堂测试源代码及使用截图
1源代码 第一部分 package 开学测试.java;class ScoreInformation {String stunumber;String name;double mathematicss ...
- Kruskal(测试源代码)
1.此程序为c++程序 2.以下代码可实现手动输入,即去掉代码中的/*...*/注释符,并同时去掉赋值代码段 3.源代码 #include<iostream> using namespac ...
- Huffman编码(测试源代码)
1.此程序为c++程序 2.以下代码可实现手动输入,即去掉代码中的/*...*/注释符,并同时去掉赋值代码段 3.源代码 #include<iostream> using namespac ...
- Java开学测试源代码
package sample; import java.io.IOException;import java.io.Serializable;import java.util.Scanner;impo ...
- Asp.net 面向接口可扩展框架之核心容器(含测试代码下载)
新框架的容器部分终于调通了!容器实在太重要了,所以有用了一个名词叫“核心容器”. 容器为什么那么重要呢?这个有必要好好说道说道. 1.首先我们从框架名称面向接口编程说起,什么是面向接口编程?(这个度娘 ...
- Java学习-018-EXCEL 文件写入实例源代码
众所周知,EXCEL 也是软件测试开发过程中,常用的数据文件导入导出时的类型文件之一,此文主要讲述如何通过 EXCEL 文件中 Sheet 的索引(index)或者 Sheet 名称获取文件中对应 S ...
- Java学习-013-文本文件读取实例源代码(两种数据返回格式)
此文源码主要为应用 Java 读取文本文件内容实例的源代码.若有不足之处,敬请大神指正,不胜感激! 1.读取的文本文件内容以一维数组[LinkedList<String>]的形式返回,源代 ...
- Java学习-012-文件删除实例及源代码
此文源码主要为应用 Java 创建文件的源代码.若有不足之处,敬请大神指正,不胜感激! 文件删除源代码如下: /** * @function 文件操作:删除文件.若文件存在且未被占用,则删除文件:若文 ...
随机推荐
- 微信JS SDK Demo 官方案例[转]
摘要: 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用 ...
- .Net消息队列的使用
版权声明:作者:真爱无限 出处:http://blog.csdn.net/pukuimin1226 本文为博主原创文章版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 ...
- [转载]Bison-Flex 笔记
FLEX 什么是FLEX?它是一个自动化工具,可以按照定义好的规则自动生成一个C函数yylex(),也成为扫描器(Scanner).这个C函数把文本串作为输入,按照定义好的规则分析文本串中的字符,找到 ...
- iOS 给NSString文字上添加横线 中间和下划线
有时候我们需要给文字添加横线,有两种情况: 第一种是贯穿中间的横线: 横线的颜色和文字的颜色保持一致 _oldPriceLabel.text = "; _oldPriceLabel.text ...
- 获取指定DLL程序集Config 文件
/// <summary> /// 获取调用函数所在程序集的配置信息 /// </summary> /// <returns></returns> pr ...
- Android studio 提示:Can't use Subversion command line client: svn Probably the path to Subversion executable is wrong. Fix it.
1.参考来源:http://my.oschina.net/fyyy/blog/519353 按照下图,svn相关选项不要选.
- 《Pro Express.js》学习笔记——Express服务启动常规七步
Express服务启动常规七步 1. 引用模块 var express=require('express'), compression=require('compression'), bo ...
- Spring(3)
一.Spring容器 Spring 提供了两种类型的IOC容器(后面还会讲到AOP容器): (1)BeanFactory:IOC容器的基本实现,是Spring框架的基础设施,面向Spring的本身 ( ...
- 作业七:团队项目——Alpha版本冲刺阶段010
今日安排:组内成员讨论 今日进程:组内成员讨论结束,并有明确的解决办法,每个人准备实践
- Ubuntu下freeradius的EAP-MD5,PEAPv0/EAP-MSCHAPv2,EAP-TTLS/MD5,EAP-TTLS/MSCHAPv2方式认证(基于mysql)
基于freeradius+mysql,今天验证下freeradius的EAP认证:1.EAP-MD5:2.EAP-PEAP 一.EAP-MD5方式认证 1.修改配置文件 (1)/usr/local/e ...