#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
#include<string.h>
#include<stdio.h>
using namespace std;
#define MaxVertexNum 100
#define INF 32767
#define INF 32767
class MGraph
{
private:
char vertex[MaxVertexNum];
int edges[MaxVertexNum][MaxVertexNum];
int n, e;
public:
void CreateMGraph(MGraph&);
void Ppath(int path[100][100], int i, int j);
void Dispath(int A[100][100], int path[100][100], int n);
void Floyd(MGraph G);
};
{
private:
char vertex[MaxVertexNum];
int edges[MaxVertexNum][MaxVertexNum];
int n, e;
public:
void CreateMGraph(MGraph&);
void Ppath(int path[100][100], int i, int j);
void Dispath(int A[100][100], int path[100][100], int n);
void Floyd(MGraph G);
};
void MGraph::CreateMGraph(MGraph& G)
{
int i, j, k, p;
cout << "请输入顶点数和边数:";
cin >> G.n >> G.e;
cout << "请输入顶点元素:";
for (i = 0; i < G.n; i++)
{
cin >> G.vertex[i];
}
for (i = 0; i < G.n; i++)
{
for (j = 0; j < G.n; j++)
{
G.edges[i][j] = INF;
if (i = j)
{
G.edges[i][j] = 0;
}
}
}
for (k = 0; k < G.e; k++)
{
cout << "请输入第" << k + 1 << "条弧头弧尾序号和相应的权值:";
cin >> i >> j >> p;
G.edges[i][j] = p;
}
}
{
int i, j, k, p;
cout << "请输入顶点数和边数:";
cin >> G.n >> G.e;
cout << "请输入顶点元素:";
for (i = 0; i < G.n; i++)
{
cin >> G.vertex[i];
}
for (i = 0; i < G.n; i++)
{
for (j = 0; j < G.n; j++)
{
G.edges[i][j] = INF;
if (i = j)
{
G.edges[i][j] = 0;
}
}
}
for (k = 0; k < G.e; k++)
{
cout << "请输入第" << k + 1 << "条弧头弧尾序号和相应的权值:";
cin >> i >> j >> p;
G.edges[i][j] = p;
}
}
void MGraph::Ppath(int path[MaxVertexNum][MaxVertexNum], int i, int j)
{
{
int k;
k = path[i][j];
if (k == -1)
{
return;
}
else
{
Ppath(path, i, k);
cout << k;
Ppath(path, k, j);
}
}
k = path[i][j];
if (k == -1)
{
return;
}
else
{
Ppath(path, i, k);
cout << k;
Ppath(path, k, j);
}
}
void MGraph::Dispath(int A[MaxVertexNum][MaxVertexNum], int path[MaxVertexNum][MaxVertexNum], int n)
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (A[i][j] == INF)
{
if (i != j)
{
printf("从%d到%d没有路径\n", i, j);
}
}
else
{
cout << "从" << i << "到" << j << "的路径长度为:" << A[i][j] << "路径为:";
cout << i;
Ppath(path, i, j);
cout << j << endl;
}
}
}
}
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (A[i][j] == INF)
{
if (i != j)
{
printf("从%d到%d没有路径\n", i, j);
}
}
else
{
cout << "从" << i << "到" << j << "的路径长度为:" << A[i][j] << "路径为:";
cout << i;
Ppath(path, i, j);
cout << j << endl;
}
}
}
}
void MGraph::Floyd(MGraph G)
{
int A[MaxVertexNum][MaxVertexNum], path[MaxVertexNum][MaxVertexNum];
int i, j, k;
for (i = 0; i < G.n; i++)
{
for (j = 0; j < G.n; j++)
{
A[i][j] = G.edges[i][j];
path[i][j] = -1;
}
for (k = 0; k < G.n; k++)
{
for (i = 0; i < G.n; i++)
{
for (j = 0; j < G.n; j++)
{
if (A[i][j]>A[i][k] + A[k][j])
{
A[i][j] = A[i][k] + A[k][j];
path[i][j] = path[i][k] + path[k][j];
}
}
}
}
}
Dispath(A, path, G.n);
}
{
int A[MaxVertexNum][MaxVertexNum], path[MaxVertexNum][MaxVertexNum];
int i, j, k;
for (i = 0; i < G.n; i++)
{
for (j = 0; j < G.n; j++)
{
A[i][j] = G.edges[i][j];
path[i][j] = -1;
}
for (k = 0; k < G.n; k++)
{
for (i = 0; i < G.n; i++)
{
for (j = 0; j < G.n; j++)
{
if (A[i][j]>A[i][k] + A[k][j])
{
A[i][j] = A[i][k] + A[k][j];
path[i][j] = path[i][k] + path[k][j];
}
}
}
}
}
Dispath(A, path, G.n);
}
int main()
{
MGraph G;
G.CreateMGraph(G);
G.Floyd(G);
}
{
MGraph G;
G.CreateMGraph(G);
G.Floyd(G);
}
vs2017里面是定位到第55行的代码k=path[i][j]这一行有错误
求问究竟是哪里出了错误