poj 1125 简单的floyd应…
来源:互联网 发布:手机怎样淘宝购物 编辑:程序博客网 时间:2024/05/29 04:33
题意有点模糊
题意:要给所有人传递一个消息 , 问让所有多都知道的这个消息 , 应该让谁传递 ,然后输出这个人传递消息所需要的时间(消息可以同时向多个人传递)
//floyd算法同时使用于有向、无向图 , 我允许环存在负权, 但是不允许存在负权回路
#include
#include
#include
#include
#include
using namespace std;
const int INF = 0xfffffff;
#define maxn 110
int grap[maxn][maxn]; //邻接矩阵存储图
int n , m;
int dist[maxn][maxn]; //记录从所有点之间的最短距离
void init() // 对一些数据进行初始化
{
int i ,j;
for(i = 0; i<= n; i++)
for(j = 0; j<= n; j++)
grap[i][j] =INF , grap[i][i] = 0;
}
void floyd()
{
int i , j ,k;
for(i = 1; i<= n; i++) //初始化, 一开始每个点与点之间的路径长度 就等于grap中的长度
for(j = 1; j<= n; j++)
dist[i][j] =grap[i][j];
for(k = 1; k<= n; k++) //每个点都要成为中间点
for(i = 1; i<= n; i++)
for(j = 1; j<= n; j++)
{
if(k ==i ||k == j) continue;
if(dist[i][k]+dist[k][j] < dist[i][j])
dist[i][j] =dist[i][k] + dist[k][j];
}
}
int main()
{
while(scanf("%d" , &n) != EOF)
{
if(n ==0) break;
init();
int i , x ,y , z , j;
for(i = 1; i<= n; i++) //对有向图进行存储
{
scanf("%d" ,&x);
for(j = 1; j<= x; j++)
{
scanf("%d%d" , &y , &z);
题意:要给所有人传递一个消息 , 问让所有多都知道的这个消息 , 应该让谁传递 ,然后输出这个人传递消息所需要的时间(消息可以同时向多个人传递)
//floyd算法同时使用于有向、无向图 , 我允许环存在负权, 但是不允许存在负权回路
#include
#include
#include
#include
#include
using namespace std;
const int INF = 0xfffffff;
#define maxn 110
int grap[maxn][maxn]; //邻接矩阵存储图
int n , m;
int dist[maxn][maxn]; //记录从所有点之间的最短距离
void init()
{
}
void floyd()
{
}
int main()
{