看看这是啥问题嘛,标有红色叉的说是栈溢出了,但我怎么改还是这样啊
以下是全部代码
#include <fstream>
#include <sstream>
#include<iostream>
#include<string>
#include<stdlib.h>
using namespace std;
#define max 100000
string name[1000];
int map[1000][1000];
int i, j, v1, v2, u, min;
int s[1000], d[1000], p[1000];
void shuchu(int v1, int v2)
{
int a[1000] = { 0 };
int k = 0;
k = v2;i = 1;
while (k != v1)
{
i++;
a[i] = k;
k = p[k];
}
i++;
a[i] = v1;
u = i;
cout << endl;
cout << name[v1] << "->" << name[v2] << "的最短路径长度是:" << d[v2] << "米" << endl;
if (u > 2)
{
cout << "具体路径是:" << endl;
for (i = u;i > 2;i--)
cout << name[a[i]] << "->" << name[a[i - 1]] << ":" << map[a[i]][a[i - 1]] << "米" << endl;
}
}
void dijkstra(int v1, int v2)
{
for (i = 1;i <= 14;i++)
{
s[i] = 0;
d[i] = map[v1][i];
if (d[i] < max) p[i] = v1;
else p[i] = -1;
}
s[v1] = 1;d[v1] = 0;
for (i = 1;i <= 14;i++)
{
min = max;
for (j = 1;j <= 14;j++)
{
if (s[j] == 0 && d[j] < min)
{
i = j;min = d[j];
}
}
s[i] = 1;
for (j = 1;j <= 14;j++)
{
if (s[j] == 0 && (d[i] + map[i][j] < d[j]))
{
d[j] = d[i] + map[i][j];
p[j] = i;
}
}
}
}
int main()
{
cout << " ==================== 广东外语外贸大学校园导航 ====================== " << endl;
cout << " = = " << endl;
cout << " = 1. 1饭 2. 2饭 3. 3饭 4.南苑 5. 北苑 = " << endl;
cout << " = 6. 师苑 7. 又康 8. 门诊部 9. 教学区 10. 图书馆 = " << endl;
cout << " = 11. 实验楼 12. 体育场 13. 篮球场 14. 校办公室 0. 退出 = " << endl;
cout << " = = " << endl;
cout << " ==================================================================== " << endl;
cout << endl;
name[1] = "1饭";
name[2] = "2饭";
name[3] = "3饭";
name[4] = "南苑";
name[5] = "北苑";
name[6] = "师苑";
name[7] = "又康";
name[8] = "门诊部";
name[9] = "教学区";
name[10] = "图书馆";
name[11] = "实验楼";
name[12] = "体育场";
name[13] = "篮球场";
name[14] = "校办公室";
for (i = 1;i <= 14;i++)
for (int j = 1;j <= 14;j++)
{
if (i == j)
map[i][j] = 0;
else
map[i][j] = max;
}
string filename;
filename = R"(D:\zuoye\duru.txt)";
ifstream fin(filename, ios::in);
if (fin.is_open() == false)
{
cout << "打开文件" << filename << "失败。" << endl;
return 0;
}
int n, m, y;
while (!fin.eof())
{
fin >> n >> m >> y;
map[n][m] = map[m][n] = y;
}
cout << "请输入起点:";
cin >> v1;
if (v1 == 0)
{
cout << endl;
cout << "欢迎下次使用!" << endl;
}
else
{
cout << "请输入终点:";
cin >> v2;
dijkstra(v1, v2);
shuchu(v1, v2);
}
fin.close();
return 0;
}