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. jsessionid 导致重定向404的问题

    http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpServletResponse.html#encod ...

  2. CSS基础3

    1.变形样式 transform : none | <transform-function>,改变元素的大小,透明,旋转角度,扭曲度等.<transform-function> ...

  3. linux操作系统基础

    计算机概述 1.计算机接收用户输入指令数据,经过cpu数据与逻辑单元运算处理后,产生或储存成有用的信息--->I/O设备+cpu+处理信息=计算机. 2.计算机五大单元:I/O单元 内存单元 c ...

  4. Understanding the Internal Message Buffers of Storm

    Understanding the Internal Message Buffers of Storm Jun 21st, 2013 Table of Contents Internal messag ...

  5. android开发 兵器

    spring for android andriod anotatons 按android原生的方式写代码,会导致冗余,代码丑陋,开发效率低下. 最近对项目代码进行一些梳理和改进.

  6. Bootstrap <基础七>按钮

    任何带有 class .btn 的元素都会继承圆角灰色按钮的默认外观.但是 Bootstrap 提供了一些选项来定义按钮的样式,具体如下表所示: 以下样式可用于<a>, <butto ...

  7. Python array,list,dataframe索引切片操作 2016年07月19日——智浪文档

    array,list,dataframe索引切片操作 2016年07月19日——智浪文档 list,一维,二维array,datafrme,loc.iloc.ix的简单探讨 Numpy数组的索引和切片 ...

  8. 取得交换机的MAC地址

    一.首先PING交换机的IP地址 二.然后执行 ARP -a 命令 如下图:

  9. IE6兼容问题并解决总结

    1.使用声明你必须经常在html网页头部放置一个声明,推荐使用严格的标准.例如<!DOCTYPEHTMLPUBLIC“-//W3C//DTDHTML4.01//EN”   "http: ...

  10. cocoapods无法使用(mac os 10.11升级导致pod: command not found)

    之前安装了cocoapods, 那么输入 : sudo gem install -n /usr/local/bin cocoapods 如果还不行的话 首先在终端输入 gem sources -l 查 ...