HDU-1869(floyd求任意两点之间的距离)
来源:互联网 发布:取消淘宝退款的验证码 编辑:程序博客网 时间:2024/06/06 05:52
这个题目,我一看到的居然是用DFS,汗了,,,但是我写着写着,还居然给过了样例,和自己的一些特殊数据,,但是到后来我突然就觉得不对了,,因为一出现环数据就过不了了,而我又不想在研究研究求出最小值,但是这个思路还是可行的...但是麻烦,我就不写出来了.
然后floyd算法还是比较简单的.只用个三重循环,然后再来个二重循环就可以整出来了,代码非常好实现,
代码如下:
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>int N,M;int map[205][205];void Floyd(){for(int k=0;k<=N;k++)for(int i=0;i<=N;i++)for(int j=0;j<=N;j++)if(map[i][j]>map[i][k]+map[k][j]&&map[i][k]!=0x3f3f3f3f&&map[k][j]!=0x3f3f3f3f)map[i][j]=map[i][k]+map[k][j];}int judge(){for(int i=0;i<N;i++){for(int j=0;j<N;j++){//printf("sta=%d end=%d, step=%d",i,j,map[i][j]);//printf("\n");if(map[i][j]>7){return 0;}}}return 1;}int main(){while(scanf("%d%d",&N,&M)!=EOF){int a,b;memset(map,0x3f,sizeof(map));for(int kk=0;kk<N;kk++)map[kk][kk]=0;for(int i=1;i<=M;i++){scanf("%d%d",&a,&b);map[a][b]=1;map[b][a]=1;}Floyd();if(judge())printf("Yes\n");elseprintf("No\n");}return 0;}
当然我也想把我的DFS也贴出来 嘿嘿,虽然是错的,但毕竟是一种思路不,,呼呼
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>int N,M;//N represents the number of points,and M stands for the number of edges;int idx;int head[105];int step;int flag;int visit[105];struct Edge{int v;int next;}e[205];void addedge(int a,int b){idx++;e[idx].v=b;e[idx].next=head[a];head[a]=idx;}void DFS(int a,int step){if(step>6){flag=0;return;}for(int p=head[a];p!=-1;p=e[p].next){if(flag==1&&!visit[e[p].v]){visit[e[p].v]=1;DFS(e[p].v,step+1);visit[e[p].v]=0;}}}int main(){while(scanf("%d%d",&N,&M)!=EOF){int a,b;int t=-1;idx=0;memset(head,-1,sizeof(head));for(int i=0;i<M;i++){scanf("%d%d",&a,&b);addedge(a,b);addedge(b,a);}for(i=0;i<N;i++){flag=1;memset(visit,0,sizeof(visit));visit[i]=1;DFS(i,-1);if(flag==0){printf("No\n");break;}visit[i]=0;}if(t<=6&&flag==1)printf("Yes\n");}return 0;}
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>#include <iostream>#include <algorithm>#define inf 0x3fffffff#define inf2 0x3f3f3f3fusing namespace std;int map[555][555];int N,M;void Floyd(){for(int k=1; k <= N; k++){for(int i=1; i <= N ; i++ ){for(int j=1 ;j <= N;j++){if(map[i][j]>map[i][k]+map[k][j]&&map[i][k]!=inf2&&map[k][j]!=inf2)map[i][j]=map[i][k]+map[k][j];}}}}int main(){while(scanf("%d %d" ,&N, &M)!=EOF){int a, b;int min=inf;int val;memset(map,0x3f3f3f3f,sizeof(map));for(int i=1 ; i<=M ;i++ ){scanf("%d %d %d " , &a , &b ,&val );if(map[a][b]>val){map[a][b]=val;map[b][a]=val;}}Floyd();while(cin >> a >> b){cout << map[a][b] << endl;}}return 0;}
- HDU-1869(floyd求任意两点之间的距离)
- 用FLOYD算法求特殊图的任意两点之间的距离
- hdu 2376(求树上任意两点之间距离之和的平均值)
- HDU 4460 求任意两点最短距离的最大距离
- 求两点之间的距离
- 求两点之间的距离
- 求两点之间的距离
- 求两点之间的距离
- 求两点之间的距离
- 求两点之间的距离
- 计算地球表面任意两点之间的距离
- 求地球表面任意两点的距离
- 两点之间求距离
- 根据两点之间的经纬度求距离
- 求两点之间的直线距离
- [IOS 开发] 求两点之间的距离
- acm2 求两点之间的距离
- HDU2001求两点之间的距离
- ARM开发的调试方法概述
- 正则表达式30分钟入门教程
- linux中配置DHCP服务器
- Java SE 学习笔记--Lesson 00
- 看过的小故事摘录
- HDU-1869(floyd求任意两点之间的距离)
- c++虚基类的作用
- JSP学习笔记(二十九):利用urlrewrite重写url
- 软件学生的痛苦!
- 面向服务方法与传统方法的区别
- Java SE 学习笔记--Lesson 01
- iPhone 路径大全
- poj 3468 A Simple Problem with Integers 线段树 区间更新求和
- VC6.0下Xtreme ToolkitPro安装