六度分离(floyd算法,SPFA算法,最短路—Dijkstra算法)
Time Limit : 5000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 36 Accepted Submission(s) : 16
Lele对这个理论相当有兴趣。于是,他在HDU里对N个人展开了调查。
他已经得到了他们之间的相识关系,如今就请你帮他验证一下“六度分离”是否成立吧。
对于每组測试,第一行包括两个整数N,M(0<n<100,0<m<200),分别代表hdu里的人数(这些人分别编成0~n-1号),以及他们之间的关系。 <="" div="" 除了这m组关系。其它随意两人之间均不相识。="" 接下来有m行,每行两个整数a,b(0<="A,B<N)表示HDU里编号为A和编号B的人互相认识。
">
#include<stdio.h>
#include<string.h>
#define M 10000000
#define min(a,b) (a)>(b)?(b):(a)
int map[202][202];
int vis[202],dist[202];
int n,s,t,flag;
int dijkstra(int s)
{int min,i,j,k;memset(vis,0,sizeof(vis));for(i=0; i<n; i++)dist[i]=M;dist[s]=0;for(i=0; i<n; i++){k=-1;for(j=0; j<n; j++)if(!vis[j]&&(k==-1||dist[j]<dist[k]))k=j;if(dist[k]>7||k==-1){flag=0;return 0;}vis[k]=1;for(j=0; j<n; j++)dist[j]=min(dist[j],dist[k]+map[k][j]);}return 1;
}int main()
{int i,j,x,y,z,m;while(scanf("%d%d",&n,&m)!=EOF){flag=1;for(i=0; i<n; i++)for(j=0; j<n; j++)map[i][j]=map[j][i]=M;for(i=0; i<m; i++){scanf("%d%d",&x,&y);map[y][x]=1;map[x][y]=1;}for(i=0;i<n;i++)if(!dijkstra(i))//少了一个!
break; if(flag) printf("Yes\n"); else printf("No\n"); } return 0; }
再贴一个spfa算法写的代码。
#include<stdio.h>
#include<queue>
#include<string.h>
#include<algorithm>
using namespace std;
struct stu{int one,two,val,next;
};
stu edge[30000];
int vid[3000],vist[30000],head[30000],t,N,M,flag;
int spfa(int s)
{memset(vid,0,sizeof(vid));memset(vist,0x3f3f3f3f,sizeof(vist));queue<int> q;q.push(s);vid[s]=1;vist[s]=0;while(!q.empty()){int u=q.front();q.pop();vid[u]=0;for(int i=head[u];i!=-1;i=edge[i].next){int v=edge[i].two;if(vist[v]>vist[u]+edge[i].val){vist[v]=vist[u]+edge[i].val;if(!vid[v]){q.push(v);vid[v]=1;}}}}for(int i=0;i<N;++i)if(vist[i]>7){flag=0;return 0;}return 1;
}
void get(int u,int v,int w)
{stu E={u,v,w,head[u]};edge[t]=E;head[u]=t++;
}
int main()
{while(scanf("%d%d",&N,&M)!=EOF){t=0;flag=1;memset(head,-1,sizeof(head));int i,j,a,b,c;for(i=0;i<M;i++){scanf("%d%d",&a,&b);get(a,b,1);get(b,a,1);}for(i=0;i<N;i++)if(!spfa(i))break;if(flag)printf("Yes\n");else printf("No\n");}return 0;
}
再贴一个floyd()算法写的程序
#include<stdio.h>
#include<string.h>
#define INL 0x3f3f3f3f
#define min(a,b) (a)>(b)?(b):(a)//这个地方弄错了,弄成大于了。把这个改了一下就不超时了
int x[110][110];
int n,m;
void floyd()
{for(int k=0;k<n;k++)for(int i=0;i<n;i++)for(int j=0;j<n;j++) x[i][j]=min(x[i][j],x[i][k]+x[k][j]);
}
int main()
{int i,j,k,flag,a,b;while(scanf("%d%d",&n,&m)!=EOF){for(i=0;i<n;i++)//这个地方应该写成n,错写成m了<img alt="哭" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/cry.gif" />for(j=0;j<m;j++)x[i][j]=INL;for(i=0;i<m;i++){scanf("%d%d",&a,&b);x[a][b]=x[b][a]=1;}floyd();flag=0;for(i=0;i<n;i++){for(j=0;j<n;j++)if(x[i][j]>7||x[i][j]==INL){flag=1;break;}if(flag)break;}if(flag) printf("No\n");else printf("Yes\n");}return 0;
}
六度分离(floyd算法,SPFA算法,最短路—Dijkstra算法)相关推荐
- 03 最短路 dijkstra算法spfa算法floyd算法(附带实例代码) 图论-1
文章目录 最短路 邻接表的图如下 邻接矩阵如下图 链表实现邻接表实现代码 单源最短路径 Dijkstra 算法 朴素版本 Dijkstra 实现代码 堆优化的dijkstra算法代码实现 Bellma ...
- 单源最短路 Dijkstra算法 和 SPFA算法
单源最短路 •从一个点出发,到达其他顶点的最短路径的长度. •基本操作:松弛 •d[u]+map[u, v]< d[v]这样的边(u,v)称为紧的(tense),可以对它进行松弛(relax): ...
- 图论-最短路Dijkstra算法详解超详 有图解
整体来看dij就是从起点开始扩散致整个图的过程,为什么说他稳定呢,是因为他每次迭代,都能得到至少一个结点的最短路.(不像SPFA,玄学复杂度) 但是他的缺点就是不能处理带负权值的边,和代码量稍稍复杂. ...
- python棋盘最短路径_Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例...
本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...
- 图的最短路径算法及matlab实现(Dijkstra算法、Floyd算法、Bellman-Ford算法、Johnson 算法)
图的最短路径算法 Dijkstra算法 Dijkstra算法研究的是从初始点到其他任一结点的最短路径,即单源最短路径问题,其对图的要求是不存在负权值的边. Dijkstra算法主要特点是以起始点为中心 ...
- 单源最短路——dijkstra算法
Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止. 问 ...
- 图论 —— 最短路 —— Dijkstra 算法
[概述] Dijkstra 算法是单源最短路径算法,即计算起点只有一个的情况到其他点的最短路径,其无法处理存在负边权的情况. 其时间复杂度是:O(E+VlogV) [算法分析] 将点分为两类,一类是已 ...
- 图论算法讲解--最短路--Dijkstra算法
一.绪论 要学习最短路算法我们首先应该知道什么是图以及什么是最短路. 图在离散数学中的定义为:图G=(V,E)是一个二元组(V,E)使得E⊆[V]的平方,所以E的元素是V的2-元子集.为了避免符号上的 ...
- POJ-3268-最短路(dijkstra算法)
Silver Cow Party Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 12494 Accepted: 5568 ...
- 最短路dijkstra算法详解_最短路径问题---Dijkstra算法详解
1.Dijkstra算法介绍 · 算法起源: · Djkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家E ...
最新文章
- 深入剖析RocketMQ源码-NameServer
- ++i 和 i++ 效率分析(C++)
- oracle 实例用法,Oracle merge into用法以及相关例子示例
- 洛谷 P1242 新汉诺塔
- android setContentView处理流程
- php yii框架源码,yii 源码解读
- 8.10模拟:贪心、最优化思路
- RabbiqMQ快速入门
- 前端学习(1524):ES6模块导入和导出
- 15 操作系统第四章 文件管理 文件的物理结构 文件存储空间管理
- MongoDB 用户管理
- 【转】Objective-C语法property详解
- java treeset排序_java TreeSet的排序之自然排序
- 同步计数器 CountDownLatch
- 【COCOS2DX-LUA 脚本开发之十二】Hybrid模式-利用AssetsManager实现在线更新脚本文件lua、js、图片等资源(免去平台审核周期)...
- Java写的斗地主游戏源码
- a5m2使用方法 mysql_反転
- 马化腾:通向互联网未来的七个路标
- SAP UI5 应用开发教程之六十九 - 如何从 SAP UI5 Not Found 页面跳转回到正常的应用页面试读版
- 儿童python编程app_Python编程狮app下载
热门文章
- rdma_RDMA:基本原理和自举探索
- 安装图解:Linux Mint 4.0(Daryna)(或者说完美的桌面系统)
- 佳博80系列小票打印机 gp 80180安装驱动,显示打印错误
- SAP 打开总账科目
- linux 查看文件最后几行
- 自然语言处理----常用函数简析
- python中shelf对象_11.4. shelve — Python 对象持久化 — Python 2.7.18 文档
- python test suite什么意思_在python中创建testsuite
- 使用Termux在安卓手机上运行tomcat服务器
- 亚马逊入驻商用户画像分析