1869最短路径,弗洛伊的算法.cpp

本文介绍了一个使用C语言实现的程序,该程序通过弗洛伊德算法来判断一组社交网络中任意两人之间是否可以通过不超过六个人的关系链联系起来。程序首先读取节点数量和边的数量,然后初始化地图和距离矩阵,并根据输入建立图模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>

#include<math.h>

#include<stdlib.h>

#define max 2<<10 //这个数不能太大也不能太小,太大了两个数相加时就越界了,刚开始是2<<29;结果WA了

int map[105][105];

int d[105][105];

int main(int argc, char *argv[])

{

 int n,i,j,k,t,m;

 int a,b;

 while(scanf("%d%d",&n,&m)!=EOF){

  for(i=0;i<105;i++)//初始化。。

  for(j=0;j<105;j++)

 map[i][j]=max;

  for(i=0;i<m;i++){

   scanf("%d%d",&a,&b);

   if(a==b)

   map[a][b]=map[b][a]=0;

   else map[a][b]=map[b][a]=1;

  }

  for(i=0;i<n;i++)//初始化。。。

  for(j=0;j<n;j++)

  if(i==j) d[i][j]=0;

  else d[i][j]=d[j][i]=map[i][j];

  for(k=0;k<n;k++)//弗洛伊的算法。。不要搞乱顺序哦。。。

  for(i=0;i<n;i++)

  for(j=0;j<n;j++)

  if(d[i][j]>d[i][k]+d[k][j])

  d[i][j]=d[i][k]+d[k][j];

  int flag=0;

  for(i=0;i<n;i++){

  for(j=0;j<n;j++)

  if(d[i][j]>7){//题意说最多只隔着6个人,对应七条边。。。

   flag=1;

   break;

  }

  }

  if(flag==1)

  printf("No\n");

  else printf("Yes\n");

 }

 return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值