64,662
社区成员
发帖
与我相关
我的任务
分享
#include "stdafx.h"
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
#define MAX_value 100000 //表示极大值∞
#define max_value 95
int main()
{
bool S[max_value]; //记录从源点V0到终点Vi是否已经确定为最短路径,确定了记true,否则记false
int Path[max_value]; //记录从源点V0到终点Vi的当前最短路径上终点Vi的直接前驱顶点序号,若V0到Vi之间有边前驱为V0否则为-1
int D[max_value]; //记录源点到终点之间最短路径的长度,存在记V0到Vi的边的权值,否则记为MAX_value
int arcs[max_value][max_value]; //邻接矩阵
int vexnum; //图当前点数
//初始化操作
string vexs[max_value] = {"pingguoyuan", "gucheng", "bajiao amusement park", "babaoshan", "yuquanlu", "wukesong", "wanshoulu",
"gongzhufen", "military museum", "muxid", "nanlishilu", "fuxingmen", "xidan", "tiananmen west", "tiananmen east",
"wangfujing", "dongdan", "jianguomen", "yong'anli", "guomao", "dawanglu", "sihui", "sihui east", "xizhimen", "chegongzhuang",
"xizhimen", "jishuitan", "guloudajie", "andingmen", "yonghegong lama temple", "dongzhimen",
"dongsishitiao", "chaoyangmen", "beijing railway station", "chongwenmen", "qianmen", "hepingmen", "xuanwumen",
"changchunjie", "xidiaoyutai", "cishousi", "chedaogou", "changchunqiao", "huoqiying", "bagou", "suzhoujie",
"haidianhuangzhuang", "zhichunli", "zhichunlu", "xitucheng", "mudanyuan", "jiandemen", "beitucheng", "anzhenmen",
"huixinxijie nankou", "shaoyaoju", "taiyanggong", "sanyuanqiao", "liangmaqiao", "agricultural exhibition center",
"tuanjiehu", "hujialou", "jintaixizhao", "shuangjing", "jinsong", "panjiayuan", "shilihe", "fenzhongsi", "chengshousi",
"songjiazhuang", "shiliuzhuang", "dahongmen", "jiaomen east", "jiaomen west", "caoqiao", "jijiamiao", "shoujingmao",
"fengtai railway station", "niwa", "xiju", "liuliqao", "lianhuaqiao", "dazhongsi", "wudaokou", "shangdi", "xi'erqi",
"longze", "huilongguan", "huoying", "lishuiqiao", "beiyuan", "wangjing west", "guangximen", "liufang"};
for (int countt = 1; countt < 95; countt++)
{
for (int counttt = 1; counttt < 95; counttt++)
arcs[countt][counttt] = MAX_value;
};
//正向
arcs[0][1] = 2606;
arcs[1][2] = 1921;
arcs[2][3] = 1953;
arcs[3][4] = 1479;
arcs[4][5] = 1810;
arcs[5][6] = 1778;
arcs[6][7] = 1313;
arcs[7][8] = 1172;
arcs[8][9] = 1166;
arcs[9][10] = 1291;
arcs[10][11] = 424;
arcs[11][12] = 1590;
arcs[12][13] = 1217;
arcs[13][14] = 925;
arcs[14][15] = 852;
arcs[15][16] = 774;
arcs[16][17] = 1230;
arcs[17][18] = 1377;
arcs[18][19] = 790;
arcs[19][20] = 1385;
arcs[20][21] = 1673;
arcs[21][22] = 1714;
arcs[26][25] = 909;
arcs[24][23] = 960;
arcs[23][11] = 1832;
arcs[11][38] = 1234;
arcs[38][37] = 929;
arcs[37][36] = 851;
arcs[36][35] = 1171;
arcs[35][34] = 1634;
arcs[34][33] = 1023;
arcs[33][17] = 945;
arcs[17][32] = 1763;
arcs[32][31] = 1027;
arcs[31][30] = 824;
arcs[30][29] = 2228;
arcs[29][28] = 794;
arcs[28][27] = 1237;
arcs[27][26] = 1766;
arcs[26][25] = 1899;
arcs[44][45] = 1110;
arcs[45][46] = 950;
arcs[46][47] = 975;
arcs[47][48] = 1058;
arcs[48][49] = 1101;
arcs[49][50] = 1330;
arcs[50][51] = 973;
arcs[51][52] = 1100;
arcs[52][53] = 1020;
arcs[53][54] = 982;
arcs[54][55] = 1712;
arcs[55][56] = 1003;
arcs[56][57] = 1759;
arcs[57][58] = 1506;
arcs[58][59] = 914;
arcs[59][60] = 853;
arcs[60][61] = 1149;
arcs[61][62] = 734;
arcs[62][19] = 835;
arcs[19][63] = 1759;
arcs[63][64] = 1006;
arcs[64][65] = 1021;
arcs[65][66] = 1097;
arcs[66][67] = 1804;
arcs[67][68] = 1058;
arcs[68][69] = 1677;
arcs[69][70] = 1269;
arcs[70][71] = 1244;
arcs[71][72] = 1130;
arcs[72][73] = 1254;
arcs[73][74] = 1688;
arcs[74][75] = 1547;
arcs[75][76] = 1143;
arcs[76][77] = 1717;
arcs[77][78] = 954;
arcs[78][79] = 749;
arcs[79][80] = 1584;
arcs[80][81] = 2392;
arcs[81][7] = 1016;
arcs[7][39] = 2386;
arcs[39][40] = 1214;
arcs[40][41] = 1590;
arcs[41][42] = 1205;
arcs[42][43] = 961;
arcs[43][44] = 1495;
arcs[25][82] = 2839;
arcs[82][48] = 1206;
arcs[48][83] = 1829;
arcs[83][84] = 4866;
arcs[84][85] = 2538;
arcs[85][86] = 3623;
arcs[86][87] = 1423;
arcs[87][88] = 2110;
arcs[88][89] = 4785;
arcs[89][90] = 2272;
arcs[90][91] = 6722;
arcs[91][55] = 2152;
arcs[55][92] = 1110;
arcs[92][93] = 1135;
arcs[93][30] = 1769;
//反向
arcs[1][0] = 2606;
arcs[2][1] = 1921;
arcs[3][2] = 1953;
arcs[4][3] = 1479;
arcs[5][4] = 1810;
arcs[6][5] = 1778;
arcs[7][6] = 1313;
arcs[8][7] = 1172;
arcs[9][8] = 1166;
arcs[10][9] = 1291;
arcs[11][10] = 424;
arcs[12][11] = 1590;
arcs[13][12] = 1217;
arcs[14][13] = 925;
arcs[15][14] = 852;
arcs[16][15] = 774;
arcs[17][16] = 1230;
arcs[18][17] = 1377;
arcs[19][18] = 790;
arcs[20][19] = 1385;
arcs[21][20] = 1673;
arcs[22][21] = 1714;
arcs[25][26] = 909;
arcs[23][24] = 960;
arcs[11][23] = 1832;
arcs[38][11] = 1234;
arcs[37][38] = 929;
arcs[36][37] = 851;
arcs[35][36] = 1171;
arcs[34][35] = 1634;
arcs[33][34] = 1023;
arcs[17][33] = 945;
arcs[32][17] = 1763;
arcs[31][32] = 1027;
arcs[30][31] = 824;
arcs[29][30] = 2228;
arcs[28][29] = 794;
arcs[27][28] = 1237;
arcs[26][27] = 1766;
arcs[25][26] = 1899;
arcs[45][44] = 1110;
arcs[46][45] = 950;
arcs[47][46] = 975;
arcs[48][47] = 1058;
arcs[49][48] = 1101;
arcs[50][49] = 1330;
arcs[51][50] = 973;
arcs[52][51] = 1100;
arcs[53][52] = 1020;
arcs[54][53] = 982;
arcs[55][54] = 1712;
arcs[56][55] = 1003;
arcs[57][56] = 1759;
arcs[58][57] = 1506;
arcs[59][58] = 914;
arcs[60][59] = 853;
arcs[61][60] = 1149;
arcs[62][61] = 734;
arcs[19][62] = 835;
arcs[63][19] = 1759;
arcs[64][63] = 1006;
arcs[65][64] = 1021;
arcs[66][65] = 1097;
arcs[67][66] = 1804;
arcs[68][67] = 1058;
arcs[69][68] = 1677;
arcs[70][69] = 1269;
arcs[71][70] = 1244;
arcs[72][71] = 1130;
arcs[73][72] = 1254;
arcs[74][73] = 1688;
arcs[75][74] = 1547;
arcs[76][75] = 1143;
arcs[77][76] = 1717;
arcs[78][77] = 954;
arcs[79][78] = 749;
arcs[80][79] = 1584;
arcs[81][80] = 2392;
arcs[7][81] = 1016;
arcs[39][7] = 2386;
arcs[40][39] = 1214;
arcs[41][40] = 1590;
arcs[42][41] = 1205;
arcs[43][42] = 961;
arcs[44][43] = 1495;
arcs[82][25] = 2839;
arcs[48][82] = 1206;
arcs[83][48] = 1829;
arcs[84][83] = 4866;
arcs[85][84] = 2538;
arcs[86][85] = 3623;
arcs[87][86] = 1423;
arcs[88][87] = 2110;
arcs[89][88] = 4785;
arcs[90][89] = 2272;
arcs[91][90] = 6722;
arcs[55][91] = 2152;
arcs[92][55] = 1110;
arcs[93][92] = 1135;
arcs[30][93] = 1769;
vexnum = 94;
int p = 0, q = 0, feiyong = 0;
int count = 0;
printf("\n请输入s(源点)后回车(例子:pingguoyuan):");
string s, e;
getline(cin, s);
printf("\n请输入e(终点)后回车(例子:muxid):");
getline(cin, e);
for (; count < 94; count++)
{
if (s == vexs[count])
{
p = count;
}
break;
}
for (; count < 94; count++)
{
if (e == vexs[count])
{
q = count;
}
break;
}
//使用迪杰斯特拉算法求有向网G中的V0 定点到其余顶点的最短路径
int n = vexnum;//顶点数
int v0 = p;
for (int v = 0; v < n; v++)//n个顶点依次初始化
{
S[v] = false;//S初始化为空集
D[v] = arcs[v0][v];//将v0到各个终点的最短路径长度初始化为边上的权值
if (D[v] < MAX_value)
Path[v] = v0;//如果v0和v之间有边,则将v的前驱初始化为v0
else
Path[v] = -1;//如果v0和v之间无边,则将v的前驱初始化为-1
}
S[v0] = true; //将v0加入s
D[v0] = 0;//源点到源点的权值为0
//---------初始化结束,开始主循环,每次求得v0到某个顶点的最短路径,将v加到S数组
for (int i = 1; i < n; i++)//依次对其余n-1个顶点进行计算
{
int min = MAX_value;
int v = v0;
for (int w = 0; w < n; w++)
{
if (!S[w] && D[w] < min)
{//选择一条当前最短路径,终点为v
v = w;
min = D[w];
}
S[v] = true;//将v加到s集合中
for (int w = 0; w < n; w++)
{//更新从v0出发到集合V-S上所有顶点的最短路径长度
if (!S[w] && (D[v] + arcs[v][w] < D[w]))
{
D[w] = D[v] + arcs[v][w];//更新D[w]
Path[w] = v;//更改w的前驱为v
}
}
}
}
cout << "最短路径值为:" << D[q] << "米" << endl;
if (D[q] <= 6000)
{
feiyong = 3;
}
if (D[q] <= 12000 && D[q] > 6000)
{
feiyong = 4;
}
if (D[q] <= 22000 && D[q] > 12000)
{
feiyong = 5;
}
if (D[q] <= 32000 && D[q] > 22000)
{
feiyong = 6;
}
if (D[q] <= 52000 && D[q] > 32000)
{
feiyong = 7;
}
cout << "费用:" << feiyong << endl;
return 0;
}
string vexs[max]; //顶点表
int arcs[max][max]; //邻接矩阵
int vexnum; //图当前点数
//初始化操作
vexs[max] = ("pingguoyuan","gucheng","bajiao amusement park","babaoshan","yuquanlu","wukesong", "wanshoulu",...
变为
string vexs[max] = /*----这里要用大括号,怎么能用小括号呢----*/{"pingguoyuan","gucheng","bajiao amusement park","babaoshan","yuquanlu","wukesong", "wanshoulu",...
//你的崩溃问题应该小括号引起的