有关Floyd算法问题

源文件:

#include "graph.h"
int main()
{
	string ch="abc";
	MGraph m(ch,3,3);
	m.Floyd();
	m.print();
	return 0;
}

头文件:

#ifndef GRAPH_H
#define GRAPH_H
#include <iostream>
#include <string>
using namespace std;
const int Maxsize = 10;
class MGraph
{
public:
	MGraph(string a,int n,int e);
	void Floyd();
	void print();
private:
	string vertex[Maxsize];
	int arc[Maxsize][Maxsize];
	int vertexNum,arcNum;
	int dist[Maxsize][Maxsize];
   string path[Maxsize][Maxsize];
};
MGraph:: MGraph(string a,int n,int e)
{
	int i,j,k,info;
	vertexNum = n;
	arcNum = e;
	for(i=0;i<vertexNum;i++)
		vertex[i]=a[i];
	for(i=0;i<vertexNum;i++)
		for(j=0;j<vertexNum;j++)
			arc[i][j]=0;
	for(k=0;k<arcNum;k++)
	{
		cout<<"请输入边依附的两个顶点的编号"<<endl;
		cin>>i>>j;
		while(i>=vertexNum && j>=vertexNum)
		{
			cout<<"请重新输入"<<endl;
			cin>>i>>j;
		}
		cout<<"请输入边的权值"<<endl;
		cin>>info;
		while(info < 0)
		{   
			cout<<"请重新输入"<<endl;
			cin>>info;
		}
		arc[i][j]=info;
	}
    for(i=0;i<vertexNum;i++)
	{
			for(j=0;j<vertexNum;j++)
				cout<<arc[i][j]<<" ";
        cout<<endl;
	}
}
void MGraph::Floyd()
{
	int i,j,k;
	for(i=0;i<vertexNum;i++)
		for(j=0;j<vertexNum;j++)
		{
			dist[i][j] = arc[i][j];           
			if(dist[i][j] != 0) path[i][j]=vertex[i]+vertex[j];
			else path[i][j] =" ";
		}
	for(k=0;k<vertexNum;k++)
		for(i=0;i<vertexNum;i++)
			for(j=0;j<vertexNum;j++)
				if(dist[i][k]+dist[k][j]<dist[i][j]) {
					dist[i][j]=dist[i][k]+dist[k][j];
					path[i][j]=path[i][k]+path[k][j];
				}
}
void MGraph::print()    //结点m到n的最短路径
{
	cout<<"您想了解哪两个点的最短路径?请输入这两个点"<<endl;
	string ch1,ch2;
	cin>>ch1>>ch2;
	int a,b,i;
	for(i=0;i<vertexNum;i++)
		if(vertex[i] == ch1) a=i;
	for(i=0;i<vertexNum;i++)
		if(vertex[i] == ch2) b=i;
	for(i=0;i<vertexNum;i++)
	{
			for(int j=0;j<vertexNum;j++)
				cout<<path[i][j]<<" ";
	     cout<<endl;
	}
	for(i=0;i<vertexNum;i++)
	{
			for(int j=0;j<vertexNum;j++)
				cout<<dist[i][j]<<" ";
        cout<<endl;
	}
	cout<<ch1<<"到"<<ch2<<"的最短路径为:"<<path[a][b]<<endl;
}
	

#endif




我找了很久,发现Floyd()函数里的    dist[i][j] = arc[i][j];  无效,为什么呢?

void MGraph::Floyd()
{
	int i,j,k;
	for(i=0;i<vertexNum;i++)
		for(j=0;j<vertexNum;j++)
		{
			dist[i][j] = arc[i][j];           
			if(dist[i][j] != 0) path[i][j]=vertex[i]+vertex[j];
			else path[i][j] =" ";
		}

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值