floyd和迪杰斯特拉算法的路径记录方法。

先说迪杰斯特拉,先看题目吧。

题目1

这题就是迪杰斯特拉的路径记录算法题啊,还记录了最小路径个数。

代码如下

#include
#include
#include
using namespace std;
#define inf 0x3f3f3f3f
int dis[550];
int num[550];
bool vis[550];
int ne[550];
int p[550];
int g[550][550];
int n,m,s,d;
int path[550];
void out(int b)//这里就是路径的输出简单的递归。
{
	if(ne[b]==-1)
	{
		cout<dis[j])
			{
				x=j;
				tmp=dis[j];
			}
			 
		}
		vis[x]=1;
		for(int j=0;j>n>>m>>s>>d;
	memset(g,0x3f,sizeof(g));
	memset(dis,0x3f,sizeof(dis));
	for(int i=0;i>p[i];
	for(int i=0;i>x>>y>>k;
		g[x][y]=k;
		g[y][x]=k; 
	}
	dij();
	
}

下面是flyod记录路径了,应该是用了动态规划思想。

代码如下。

for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
	if(dis[i][j]>dis[i][k]+dis[k][j])
	{
		dis[i][j]=dis[i][k]+dis[k][j];
		path[i][j]=k;//这就是记录路径的数组了。
	}
} 
输出路径的代码。

void out(int i,int j)
{
	if(path[i][j]==0)
	return ;
	out(i,path[i][j]);
	cout<

这里所用的思想就是path[i][j]表示从i  到  j 必须经过path[i][j];

然后i 到 path[i][j]的路径以及 path[i][j]  到 j 的路径。



你可能感兴趣的:(图论)