HDU 1596 find the safest road(Dijkstra,数据格式没定义好wrong了无数发)
2015-10-16 20:10
507 查看
题目地址:点击打开链接
思路:应该定义为double却定义为int,wrong了无数发,注意起点和终点一样的情况
AC代码1:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <climits>
#include <cmath>
#include <cctype>
using namespace std;
const int maxn = 1010;
double map1[maxn][maxn];
double lowdist[maxn];
int visit[maxn];
int n;
void Dijkstra(int st,int ed)
{
int i,j,k;
memset(visit,0,sizeof(visit));
for(i=1; i<=n; i++)
{
lowdist[i] = map1[st][i];
}
lowdist[st] = 1;//起点和终点一样的情况
visit[st] = 1;
for(i=1; i<n; i++)
{
double max2 = -1;//注意用double,用int wrong了无数发
for(j=1; j<=n; j++)
{
if(!visit[j] && lowdist[j] > max2)
{
k = j;
max2 = lowdist[j];
}
}
visit[k] = 1;
for(j=1; j<=n; j++)
{
if(!visit[j] && lowdist[k] * map1[k][j] > lowdist[j])
{
lowdist[j] = lowdist[k] * map1[k][j];
}
}
}
}
int main()
{
int i,j,q;
while(scanf("%d",&n) != EOF)
{
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
scanf("%lf",&map1[i][j]);
}
}
scanf("%d",&q);
int st,ed;
for(i=0; i<q; i++)
{
scanf("%d%d",&st,&ed);
Dijkstra(st,ed);
if(lowdist[ed] != 0)
{
printf("%.3lf\n",lowdist[ed]);
}
else
{
printf("What a pity!\n");
}
}
}
return 0;
}AC代码2:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <climits>
#include <cmath>
#include <cctype>
using namespace std;
const int maxn = 1010;
double map1[maxn][maxn];
double lowdist[maxn];
int visit[maxn];
int n;
void Dijkstra(int st,int ed)
{
int i,j,k;
memset(visit,0,sizeof(visit));
for(i=1; i<=n; i++)
{
lowdist[i] = map1[st][i];
}
lowdist[st] = 1;
visit[st] = 1;
for(i=1; i<n; i++)
{
double max2 = 0;
k = 0;
for(j=1; j<=n; j++)
{
if(!visit[j] && lowdist[j] > max2)
{
k = j;
max2 = lowdist[j];
}
}
if(k == 0)//当k为0,表示剩下的路都不能走了,退出来
return;
visit[k] = 1;
for(j=1; j<=n; j++)
{
if(!visit[j] && lowdist[k] * map1[k][j] > lowdist[j])
{
lowdist[j] = lowdist[k] * map1[k][j];
}
}
}
}
int main()
{
int i,j,q;
while(scanf("%d",&n) != EOF)
{
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
scanf("%lf",&map1[i][j]);
}
}
scanf("%d",&q);
int st,ed;
for(i=0; i<q; i++)
{
scanf("%d%d",&st,&ed);
Dijkstra(st,ed);
if(lowdist[ed] != 0)
{
printf("%.3lf\n",lowdist[ed]);
}
else
{
printf("What a pity!\n");
}
}
}
return 0;
}
思路:应该定义为double却定义为int,wrong了无数发,注意起点和终点一样的情况
AC代码1:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <climits>
#include <cmath>
#include <cctype>
using namespace std;
const int maxn = 1010;
double map1[maxn][maxn];
double lowdist[maxn];
int visit[maxn];
int n;
void Dijkstra(int st,int ed)
{
int i,j,k;
memset(visit,0,sizeof(visit));
for(i=1; i<=n; i++)
{
lowdist[i] = map1[st][i];
}
lowdist[st] = 1;//起点和终点一样的情况
visit[st] = 1;
for(i=1; i<n; i++)
{
double max2 = -1;//注意用double,用int wrong了无数发
for(j=1; j<=n; j++)
{
if(!visit[j] && lowdist[j] > max2)
{
k = j;
max2 = lowdist[j];
}
}
visit[k] = 1;
for(j=1; j<=n; j++)
{
if(!visit[j] && lowdist[k] * map1[k][j] > lowdist[j])
{
lowdist[j] = lowdist[k] * map1[k][j];
}
}
}
}
int main()
{
int i,j,q;
while(scanf("%d",&n) != EOF)
{
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
scanf("%lf",&map1[i][j]);
}
}
scanf("%d",&q);
int st,ed;
for(i=0; i<q; i++)
{
scanf("%d%d",&st,&ed);
Dijkstra(st,ed);
if(lowdist[ed] != 0)
{
printf("%.3lf\n",lowdist[ed]);
}
else
{
printf("What a pity!\n");
}
}
}
return 0;
}AC代码2:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <climits>
#include <cmath>
#include <cctype>
using namespace std;
const int maxn = 1010;
double map1[maxn][maxn];
double lowdist[maxn];
int visit[maxn];
int n;
void Dijkstra(int st,int ed)
{
int i,j,k;
memset(visit,0,sizeof(visit));
for(i=1; i<=n; i++)
{
lowdist[i] = map1[st][i];
}
lowdist[st] = 1;
visit[st] = 1;
for(i=1; i<n; i++)
{
double max2 = 0;
k = 0;
for(j=1; j<=n; j++)
{
if(!visit[j] && lowdist[j] > max2)
{
k = j;
max2 = lowdist[j];
}
}
if(k == 0)//当k为0,表示剩下的路都不能走了,退出来
return;
visit[k] = 1;
for(j=1; j<=n; j++)
{
if(!visit[j] && lowdist[k] * map1[k][j] > lowdist[j])
{
lowdist[j] = lowdist[k] * map1[k][j];
}
}
}
}
int main()
{
int i,j,q;
while(scanf("%d",&n) != EOF)
{
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
scanf("%lf",&map1[i][j]);
}
}
scanf("%d",&q);
int st,ed;
for(i=0; i<q; i++)
{
scanf("%d%d",&st,&ed);
Dijkstra(st,ed);
if(lowdist[ed] != 0)
{
printf("%.3lf\n",lowdist[ed]);
}
else
{
printf("What a pity!\n");
}
}
}
return 0;
}
相关文章推荐
- 写一下JavaScript的笔记
- js插件化
- jQuery中prop()方法和attr()方法可能遇到的问题小结
- How to Enhance Cloud Architectures to Enable Cross-Federation
- Jquery点击变色 再点击恢复本颜色代码案例
- jQuery 操作 input 之 checkbox
- jQuery选择器总结
- HUD1203——I NEED A OFFER!(背包问题,最小值的动态规划)
- VirtualBox安装Fedora22后无法显示满屏
- Fedora和Ubuntu下安装OpenGL开发环境配置
- AngularJS 实现按需异步加载
- Js-格式化时间戳函数
- 常见的Javascript报错及解决方案
- 百度地图JavaScript API覆盖物旋转时出现偏移
- HTML5分析实战Web存储机制(Web Storage)
- Buffer Latch Timeout的解析
- 项目中对模板和js,css文件进行压缩的处理类
- 【前端学习】javascript面向对象编程(继承和复用)
- css3 多列显示属性column
- jquery easyUI相关