poj2502 关于输入部分的坑。。
来源:互联网 发布:淘宝手机降价通知 编辑:程序博客网 时间:2024/06/11 05:53
这道题有两个注意点,,
第一就是输入, ,关键就是输入,, 所以我放入模板记忆中。。
第二就是我还是经常犯的错误吧。。。就是如果dIst是double的话,,我应该要用for(赋值,而不是用mem赋值为inf
#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<string>#include<cstring>#include<iomanip>#include<iostream>#include<stack>#include<cmath>#include<map>#include<vector>#define ll long long#define inf 0x3f3f3f3f#define INF 1e9#define bug1 cout<<"bug1"<<endl;#define bug2 cout<<"bug2"<<endl;#define bug3 cout<<"bug3"<<endl;using namespace std;#define sf scanf#define pf printf#define mem(a,b) memset(a,b,sizeof(a));const int maxn=305;struct Node{ double x,y;}node[maxn];double cost[maxn][maxn];double dis(Node a,Node b){ return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}double dist[maxn];int vis[maxn];void djk(int n){ for(int i=1;i<=n;i++) { dist[i]=INF; vis[i]=false; }/* mem(dist,inf); mem(vis,0);*/ dist[1]=0; for(int j=0;j<n;++j){ int k=-1; double Min=INF; for(int i=1;i<=n;++i){ if(!vis[i]&&dist[i]<Min){ Min=dist[i];k=i; } } if(k==-1)break; vis[k]=1; for(int i=1;i<=n;++i){ if(!vis[i]&&dist[k]+cost[k][i]<dist[i]) dist[i]=dist[k]+cost[k][i]; } }}int main(){ double v1=10000.0/60; double v2=40000.0/60; while(~sf("%lf%lf%lf%lf",&node[1].x,&node[1].y,&node[2].x,&node[2].y)){ int n=2; int cnt1=3; int x,y; for(int i=1;i<300;++i){ for(int j=1;j<300;++j){ if(i==j)cost[i][j]=0; else cost[i][j]=INF; } } while(scanf("%d%d",&x,&y)==2){ if(x==-1&&y==-1){ cnt1=n+1;continue; } n++; node[n].x=x; node[n].y=y; if(n!=cnt1)cost[n][n-1]=cost[n-1][n]=min(cost[n][n-1],dis(node[n],node[n-1])/v2); } for(int i=1;i<=n;++i){ for(int j=1;j<=n;++j){ cost[i][j]=min(cost[i][j],dis(node[i],node[j])/v1); } } //只有相邻的站点能到 djk(n); pf("%.0lf\n",(dist[2])); }}
下面是再敲的。自己的输入还是不太会,然而当我用spfa的时候确实wa、、、
#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<string>#include<cstring>#include<iomanip>#include<iostream>#include<stack>#include<cmath>#include<map>#include<vector>#define ll long long#define inf 0x3f3f3f3f#define INF 1e9#define bug1 cout<<"bug1"<<endl;#define bug2 cout<<"bug2"<<endl;#define bug3 cout<<"bug3"<<endl;using namespace std;#define sf scanf#define pf printf#define mem(a,b) memset(a,b,sizeof(a));double v1=10000.0/60;double v2=40000.0/60;const int maxn=205;double cost[maxn][maxn];int n;struct Node{ double x,y;}node[maxn];double d[maxn];double dis(Node a,Node b){ return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}int vis[maxn];/*void spfa(){ queue<int>q; for(int i=1;i<=maxn;++i){ d[i]=INF; } mem(vis,0); q.push(0); vis[0]=1; d[0]=0; while(!q.empty()){ int u=q.front();q.pop(); vis[u]=0; for(int i=0;i<=n;++i){ int v=i; if(d[v]>d[u]+cost[u][v]){ d[v]=d[u]+cost[u][v]; if(!vis[v]){ vis[v]=1;q.push(v); } } } } pf("%.0lf\n",d[1]);}*/void djk(int n){ for(int i=0;i<=n;i++) { d[i]=INF; vis[i]=false; }/* mem(d,inf); mem(vis,0);*/ d[0]=0; for(int j=0;j<n;++j){ int k=-1; double Min=INF; for(int i=0;i<=n;++i){ if(!vis[i]&&d[i]<Min){ Min=d[i];k=i; } } if(k==-1)break; vis[k]=1; for(int i=0;i<=n;++i){ if(!vis[i]&&d[k]+cost[k][i]<d[i]) d[i]=d[k]+cost[k][i]; } } pf("%.0lf\n",d[1]);}int main(){ double sx,sy,ex,ey; while(~sf("%lf%lf%lf%lf",&sx,&sy,&ex,&ey)){ node[0].x=sx;node[0].y=sy;node[1].x=ex;node[1].y=ey; for(int i=0;i<maxn;++i){ for(int j=0;j<maxn;++j){ if(i==j)cost[i][j]=0; cost[i][j]=INF; } } n=1; double x,y; /* while(~sf("%lf%lf",&x,&y)){ if(x==-1&&y==-1){ cnt=n+2; continue; } node[++n].x=x;node[n].y=y; if(n==cnt){ cnt++; cost[n-1][n]=cost[n][n-1]=dis(node[n-1],node[n])/v2; } }*/ int cnt1=n+1; while(scanf("%lf%lf",&x,&y)==2){ if(x==-1&&y==-1){ cnt1=n+1;continue; } n++; node[n].x=x; node[n].y=y; if(n!=cnt1)cost[n][n-1]=cost[n-1][n]=min(cost[n][n-1],dis(node[n],node[n-1])/v2); }//这个地方的输入还是要学学啊。。。 for(int i=0;i<=n;++i){ for(int j=0;j<=n;++j){ if(i==j)continue; cost[i][j]=min(cost[i][j],dis(node[i],node[j])/v1); } } djk(n); //spfa(); }}
0 0
- poj2502 关于输入部分的坑。。
- poj2502
- poj2502
- poj2502
- PageRank程序的输入部分
- 部分限制输入的方法
- poj2502 - Subway
- poj2502 SubWay
- Poj2502 Subway
- poj2502 Subway
- POJ2502 subway
- mysql取消一条部分输入的语句
- 关于QTP的部分使用方法
- 关于多线程的部分概念
- 关于多线程的部分概念
- 关于Collection部分的小计
- 关于数据库的部分知识点
- 关于c的部分总结
- <marquee>标签的简单使用
- vue v-for index下标中文网挖的坑
- 最大连续数字长度
- Tab Control使用方法
- new
- poj2502 关于输入部分的坑。。
- HDU 1856 More is better
- 牛客网前端大挑战修改this指向
- VMWare装CentOS 7
- Android业务组件化之子模块SubModule的拆分以及它们之间的路由Router实现
- 翻转数组
- java 四舍五入
- poj 1442 Black Boxes(treap)求第k大数的treap模板
- 线段树+dfs HDU