最短路径?青蛙(Frogger), ZOJ1942, POJ2253
来源:互联网 发布:关于网络暴力的演讲稿 编辑:程序博客网 时间:2024/06/06 08:59
感觉只是用了最短路径的思想啊。
bellman算法是神奇的迭代,dijkstra是神奇的贪心。
看了下面这个图,感到这特么就是个最小生成树的计算过程啊。
//本题求的是从起点到终点的所有通路中的最大的边的最小值(起点是第一个,终点是第二个坐标),感觉和最短路没有太大的关系,就是过程有点类似 //请尽量选择c++编译器,g++神奇的wa #include<cstdio>#include<iostream>#include<cstring>#include<cmath>#include<queue>#include<limits.h> using namespace std;const int mn=201,mm=40005;struct Edge{int to,w,next;}edges[mm];int head[mn],n,tot,x[mn],y[mn];inline int dist(int i,int j){return (x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);}void add(int u,int v){//建双向边 edges[tot].to=v;edges[tot].w=dist(u,v);edges[tot].next=head[u];head[u]=tot++;edges[tot].to=u;edges[tot].w=dist(u,v);edges[tot].next=head[v];head[v]=tot++;}double spfa(){queue<int> q;int vis[mn]={1},dis[mn];//vis判断是否在队列中 for(int i=0;i<n;++i)dis[i]=INT_MAX;q.push(0);dis[0]=0;while(q.size()){int x=q.front();q.pop();vis[x]=0;for(int j=head[x];~j;j=edges[j].next){int v=edges[j].to;if(dis[v]>max(dis[x],edges[j].w)){dis[v]=max(dis[x],edges[j].w);if(!vis[v]){vis[v]=1;q.push(v); }}}}return sqrt(1.0*dis[1]);}int main(){int kase=1;while(scanf("%d",&n)&&n){memset(head,-1,sizeof(head));tot=0;for(int i=0;i<n;++i)scanf("%d%d",x+i,y+i);for(int i=0;i<n;++i)for(int j=i+1;j<n;++j)add(i,j);printf("Scenario #%d\n",kase++);printf("Frog Distance = %.3lf\n\n",spfa());//两个回车 }return 0;}
//本题数据比较水,来个dfs,如果该点可以迭代,则以该点继续迭代下去,这个结论是对的,值得思考 #include<cstdio>#include<iostream>#include<cstring>#include<cmath>#include<queue>#include<limits.h>using namespace std;const int mn=205,mm=40005;struct Edge{ int to,w,next;} edges[mm];int head[mn],n,tot,x[mn],y[mn];inline int dist(int i,int j){ return (x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);}void add(int u,int v){ //建双向边 edges[tot].to=v; edges[tot].w=dist(u,v); edges[tot].next=head[u]; head[u]=tot++; edges[tot].to=u; edges[tot].w=dist(u,v); edges[tot].next=head[v]; head[v]=tot++;}int d[mn],vis[mn];void dfs(int i){ for(int j=head[i]; ~j; j=edges[j].next) { int v=edges[j].to; if(d[v]>max(d[i],edges[j].w)) { d[v]=max(d[i],edges[j].w); vis[v]=1;dfs(v);vis[v]=0;} }}int main(){ int kase=1; while(scanf("%d",&n)&&n) { memset(head,-1,sizeof(head)); tot=0; for(int i=0; i<n; ++i) scanf("%d%d",x+i,y+i); for(int i=0; i<n; ++i) for(int j=i+1; j<n; ++j) add(i,j); memset(d,6,sizeof(d)); memset(vis,0,sizeof(vis)); d[0]=0; vis[0]=1; dfs(0); printf("Scenario #%d\n",kase++); printf("Frog Distance = %.3lf\n\n",sqrt(1.0*d[1]));//两个回车 } return 0;}
阅读全文
1 0
- 最短路径?青蛙(Frogger), ZOJ1942, POJ2253
- POJ2253 Frogger(最短路径)
- ZOJ1942 POJ2253 Frogger,Dijkstra算法
- POJ2253&ZOJ1942--Frogger【SPFA】单源最短路变形
- Frogger最短路径
- POJ2253 最短路径变形
- POJ2253 && ZOJ1942
- poj2253 Frogger(最短路变形)
- POJ2253 Frogger 最短路变形
- 最短路径(3)--poj2253(Dijkstra变形题)
- POJ2253 Frogger -DIJKSTRA || FLOYD最短路练习
- POJ2253--Frogger FLOYD【最小树变形】
- POJ2253 Frogger(floyd最短路算法)
- poj2253 - Frogger(最短路变形)
- poj2253~Frogger(最短路floyd)
- POJ2253---Frogger(最短路变形)
- poj2253 用dijkstra计算最短路径的两个结点的最短长度
- POJ2253:Frogger
- 二叉树的深度
- HDU1076 An Easy Task
- java基础
- DC
- Yukari's Birthday HDU
- 最短路径?青蛙(Frogger), ZOJ1942, POJ2253
- spring实现表单与服务器的数据交互
- 单播、广播、组播区别
- POJ
- Redis源码学习(1):adlist
- CSU 1826:Languages(stringstream的应用)
- 小明の魔法计划(最长倍数子序列)
- 怎样将SQL数据库里面的表导出
- 深入理解Java:SimpleDateFormat安全的时间格式化