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(测试源代码)的更多相关文章

  1. 多啦爱梦~多啦A梦CSS3测试源代码

    先直接看图片,感觉一下!一直以来,我们都在说浏览器对CSS3支持度这个问题.可是,鉴于知识认识水平问题,又没几个人真正了解CSS3是什么东西,和它在网站显示上的重要性.现在好了,日本某位大神写了个CS ...

  2. JAVA语言课堂测试源代码及使用截图

    1源代码 第一部分 package 开学测试.java;class ScoreInformation {String stunumber;String name;double mathematicss ...

  3. Kruskal(测试源代码)

    1.此程序为c++程序 2.以下代码可实现手动输入,即去掉代码中的/*...*/注释符,并同时去掉赋值代码段 3.源代码 #include<iostream> using namespac ...

  4. Huffman编码(测试源代码)

    1.此程序为c++程序 2.以下代码可实现手动输入,即去掉代码中的/*...*/注释符,并同时去掉赋值代码段 3.源代码 #include<iostream> using namespac ...

  5. Java开学测试源代码

    package sample; import java.io.IOException;import java.io.Serializable;import java.util.Scanner;impo ...

  6. Asp.net 面向接口可扩展框架之核心容器(含测试代码下载)

    新框架的容器部分终于调通了!容器实在太重要了,所以有用了一个名词叫“核心容器”. 容器为什么那么重要呢?这个有必要好好说道说道. 1.首先我们从框架名称面向接口编程说起,什么是面向接口编程?(这个度娘 ...

  7. Java学习-018-EXCEL 文件写入实例源代码

    众所周知,EXCEL 也是软件测试开发过程中,常用的数据文件导入导出时的类型文件之一,此文主要讲述如何通过 EXCEL 文件中 Sheet 的索引(index)或者 Sheet 名称获取文件中对应 S ...

  8. Java学习-013-文本文件读取实例源代码(两种数据返回格式)

    此文源码主要为应用 Java 读取文本文件内容实例的源代码.若有不足之处,敬请大神指正,不胜感激! 1.读取的文本文件内容以一维数组[LinkedList<String>]的形式返回,源代 ...

  9. Java学习-012-文件删除实例及源代码

    此文源码主要为应用 Java 创建文件的源代码.若有不足之处,敬请大神指正,不胜感激! 文件删除源代码如下: /** * @function 文件操作:删除文件.若文件存在且未被占用,则删除文件:若文 ...

随机推荐

  1. sass入门教程

    一.什么是SASS SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护. 二.安装和使用 2.1 安装 SASS是Ruby语言写的,必须先 ...

  2. Jquery挂事件与移除事件

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. json转类

    JavaScriptSerializer js = new JavaScriptSerializer();T detaile = js.Deserialize<T>(json);

  4. win7系统 .chm文件打不开的解决办法

    一.正确操作方法1.鼠标右键单击该CHM文件,在右键快捷窗口中选择“打开方式”-“Microsoft HTML Help Executable”:2.如果出现一个提示窗口,大意是说,该CHM文件的发行 ...

  5. Bootstrap<基础三> 排版

    Bootstrap 使用 Helvetica Neue. Helvetica. Arial 和 sans-serif 作为其默认的字体栈. 使用 Bootstrap 的排版特性,您可以创建标题.段落. ...

  6. Object有哪些公用方法

    Object是所有类的父类,任何类都默认继承Object.Object类到底实现了哪些方法? 1.clone方法 保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出 ...

  7. Pycharm快捷键

    相比于eclipse,pycharm的确很方便,现就一些常用的快捷键记录一下: CTRL Q: 在参数列表位置,显示可以输入的所有参数.CTRL Q: 查看选中方法的文档字符串 阅读CTRL -: 折 ...

  8. SharpDevelop学习笔记(5)—— AddIns系统详解

    在所有的插件被加载到指定的扩展点后,插件树就被创建完毕了, 但是,我们知道,插件树创建后,每个插件在插件树的位置在就固定的,但是,如果某些情况下,我们希望一些插件不可使用或应该隐藏起来, 或者说有的插 ...

  9. MySQL Workbench的使用教程 (初级入门版)

    MySQL Workbench 是 MySQL AB 最近释放的可视数据库设计工具.这个工具是设计 MySQL 数据库的专用工具. MySQL Workbench 拥有很多的功能和特性:这篇由Djon ...

  10. [WinForm] VS2010发布、打包安装程序

    最近用到了VS2010WinForm的程序打包功能,网上发现一篇好帖,在此记录以供日后他人之需. 原文链接地址:http://www.mamicode.com/info-detail-2453.htm ...