hdu 1869 六度分离(SPFA算法)
来源:互联网 发布:软件外包公司好不好 编辑:程序博客网 时间:2024/05/18 01:41
本题链接:点击打开链接
本题大意:
输入n,m,代表有n个点,m条边;然后输入m个点,让证明“六度分离”的正确性,不妨设每条边的权值为1,则只需求任意两个人的最短距离是不是满足要求即可。因为最多隔六个人,故两人间的距离只要小于7就满足。具体请参考代码:
#include<stdio.h>#include<string.h>#include<queue>#define MAXN 110#define MAXM 420#define INF 0x3f3f3f3fusing namespace std;int head[MAXN];int mark[MAXN];int dis[MAXN];struct node{int from,to,val,next;};node edge[MAXM];int n,m,num;void getmap(int u,int v){node e={u,v,1,head[u]};edge[num]=e;head[u]=num++;}void SPFA(int s){queue<int>q;memset(mark,0,sizeof(mark));memset(dis,INF,sizeof(dis));q.push(s);mark[s]=1;dis[s]=0;while(!q.empty()){int top=q.front();q.pop();mark[top]=0;for(int i=head[top];i!=-1;i=edge[i].next){int u=edge[i].to;if(dis[u]>dis[top]+edge[i].val){dis[u]=dis[top]+edge[i].val;if(!mark[u]){mark[u]=1;q.push(u);}}}}}int main(){while(scanf("%d%d",&n,&m)!=EOF){num=0;int flag=0;memset(head,-1,sizeof(head));for(int i=0;i<m;i++){int a,b;scanf("%d%d",&a,&b);getmap(a,b);getmap(b,a);}for(int i=0;i<n;i++){SPFA(i);for(int j=0;j<n;j++){if(dis[j]>7){flag=1;break;}}}if(flag)printf("No\n");elseprintf("Yes\n");}return 0;}
0 0
- hdu 1869 六度分离(SPFA算法)
- 六度分离 HDU杭电1869【dijkstra算法 || SPFA】
- hdu 1869 六度分离-spfa
- hdu-1869 六度分离(SPFA做法)
- HDU 1869:六度分离【Dijsktra & SPFA & Floyd】
- HDU 1869 六度分离 【floyed & dijkstra & SPFA 】
- hdu 1869 六度分离(floyd算法)
- hdu 1869 六度分离 Floyd算法
- HDU-1869-六度分离(Floyd算法)
- hdu 1869 六度分离(Floyd算法)
- hdu1869六度分离(spfa&&dijkstra)
- 六度分离(floyd算法,SPFA算法,最短路—Dijkstra算法)
- HDOJ 1869 六度分离(最短路径,dijkstra算法,SPFA邻接表,floyd算法)
- hdu 1869 六度分离(floyd)
- HDU -- 1869 六度分离 (Floyd)
- hdu-1869-六度分离(dijkstra)
- hdu 1869 六度分离(floyd)
- hdu 1869 六度分离(Floyd)
- undefined reference to `pthread_create'的错误。
- 【软件工程】——软工视频总结
- sphinx分布式配置
- 高仿知乎日报(六)
- ssoj1232旅游
- hdu 1869 六度分离(SPFA算法)
- hdoj1951
- 不用加减乘除做加法题目:写一个函数,求两个整数之和
- Java编程思想读书笔记:第2章 一切都是对象
- poj 1734
- 第四集 牛顿方法
- 华为OJ(成绩排序)
- priority_queue优先队列容器
- HDU 3836--Equivalent Sets【求有向图最少增加多少边使图强连通 && Scc缩点新建图】