POJ 1847 dijstra算法
POJ 无限循环CE中。感觉是读题难。然后就可以建图上模板了。
附个人代码:
#include<stdio.h>
#include<string.h>
#include<iostream>
#define maxn 0x1f1f1f1f
#define size 210
using namespace std;
int low[size];
bool used[size];
int map[size][size];
int n, a, b;
void init()
{
for (int i=0; i<=n; ++i)
{
for (int j=0; j<=n; ++j)
map[i][j] = maxn;
}
memset(used, 0, sizeof(used));
}
void dijkstra(int aa)
{
int i, j, k;
for (i=0; i<n; ++i)
low[i] = map[aa][i];
low[aa] = 0;
used[aa] = true;
for (i=0; i<n; ++i)
{
int min = maxn;
int temp;
for (j=0; j<n; ++j)
{
if (used[j] == 0 && low[j] < min)
{
min = low[j];
temp = j;
}
}
if (min == maxn) break;
used[j] = 1;
for (j=0; j<n; ++j)
{
if (used[j] == 0 && low[j] > low[temp] + map[temp][j])
{
low[j] = low[temp] + map[temp][j];
}
}
}
}
int main()
{
while(~scanf("%d%d%d", &n, &a, &b))
{
init();
a--;
b--;
for (int i=0; i<n; ++i) //第i个节点的信息
{
int t, tt;
scanf("%d", &t); //有t个节点直接相连
for (int j=0; j<t; ++j) // 输入t个节点
{
scanf("%d", &tt);
tt--;
if (j == 0) //第一个为默认方向
{
//map[tt][i] = 0;
map[i][tt] = 0;
}
else
{
//map[tt][i] = 1;
map[i][tt] = 1;
}
}
}
dijkstra(a);
printf("%d\n", (low[b] == maxn) ? -1 : low[b]);
}
return 0;
}
附标准代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define N 105
#define max 0xfffffff
int f[N],mark[N],p[N][N];
int n,a,b;
void Dijkstra()
{
int i,j,k,min;
memset(mark,0,sizeof(mark));
for(i=1;i<=n;i++)
f[i]=p[a][i];
f[a]=0;
mark[a]=1;
for(i=1;i<=n;i++)
{
min=max;
for(j=1;j<=n;j++)
{
if(!mark[j]&&f[j]<min)
{
min=f[j];
k=j;
}
}
if(min==max) break;
mark[k]=1;
for(j=1;j<=n;j++)
{
if(!mark[j]&&f[k]+p[k][j]<f[j])
f[j]=f[k]+p[k][j];
}
}
if(f[b]==max) printf("-1\n");
else
printf("%d\n",f[b]);
}
int main()
{
int i,j;
while(scanf("%d%d%d",&n,&a,&b)!=EOF)
{
int c;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
p[i][j]=max;
for(i=1;i<=n;i++)
{
scanf("%d",&c);
if(c==0) continue;//第一次的时候忘了考虑c的取值,所以Time Limit Exceeded了一次
int d;
scanf("%d",&d);
p[i][d]=0;
c-=1;
while(c--)
{
scanf("%d",&d);
p[i][d]=1;
}
}
Dijkstra();
}
return 0;
}
POJ 1847 dijstra算法的更多相关文章
- POJ 1847 Floyd_wshall算法
前面用dijstra写过了.但是捏.数据很小.也可以用Floyd来写. 注意题目里给出的是有向的权值. 附代码:#include<stdio.h>#include<string.h& ...
- poj 1847 最短路简单题,dijkstra
1.poj 1847 Tram 最短路 2.总结:用dijkstra做的,算出a到其它各个点要改向的次数.其它应该也可以. 题意: 有点难懂.n个结点,每个点可通向ki个相邻点,默认指向第一个 ...
- POJ 1847 Tram (最短路径)
POJ 1847 Tram (最短路径) Description Tram network in Zagreb consists of a number of intersections and ra ...
- dijstra算法,求源点到各个顶点的最短距离
1:dijstra算法常用语求最短距离, dijstra每次从未发现节点n[]中,发现距离源点最短的节点m,求出最短节点后,将m添加到已发现节点y[]中,用该节点m进行更新其它未发现节点n[]-m的最 ...
- Dijstra算法-------为了纪念,等以后看的时候方便
杭电problem2066 Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total ...
- 单源最短路Dijstra算法
Dijstra算法是寻找从某一顶点i出发到大其他顶点的最短路径.Distra算法的思想与Prim算法很像,它收录顶点的规则是按照路径长度递增的顺序收录的.设v0是源顶点,我们要寻找从v0出发到其他任意 ...
- 最短路 || POJ 1847 Tram
POJ 1847 最短路 每个点都有初始指向,问从起点到终点最少要改变多少次点的指向 *初始指向的那条边长度为0,其他的长度为1,表示要改变一次指向,然后最短路 =========高亮!!!===== ...
- poj 1847( floyd && spfa )
http://poj.org/problem?id=1847 一个水题,用来熟悉熟悉spfa和floyd的. 题意:有m条的铁路,要从x,到y, 之后分别就是条铁路与其他铁路的交点.第一个输入的为有n ...
- poj 2195 KM算法
题目链接:http://poj.org/problem?id=2195 KM算法模板~ 代码如下: #include "stdio.h" #include "string ...
随机推荐
- 使用libcurl开源库和Duilib做的下载文件并显示进度条的小工具
转载:http://blog.csdn.net/mfcing/article/details/43603525 转载:http://blog.csdn.net/infoworld/article/de ...
- Python数据分析入门之pandas基础总结
Pandas--"大熊猫"基础 Series Series: pandas的长枪(数据表中的一列或一行,观测向量,一维数组...) Series1 = pd.Series(np.r ...
- POJ3436 ACM Computer Factory(最大流/Dinic)题解
ACM Computer Factory Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8944 Accepted: 3 ...
- Source not found :Edit Source Lookup Path 解决方案
作者原创,转载请注明转载地址 在eclipse中用debug调试的时候,出现了以下问题,很是尴尬,经常碰到,所以有必要进行总结一下: 对该问题有两种解决方案, 一种比较文明:解决方法可参考如下网址: ...
- Pytorch版本yolov3源码阅读
目录 Pytorch版本yolov3源码阅读 1. 阅读test.py 1.1 参数解读 1.2 data文件解析 1.3 cfg文件解析 1.4 根据cfg文件创建模块 1.5 YOLOLayer ...
- 【Cuda编程】加法归约
目录 cuda编程并行归约 AtomicAdd调用出错 gpu cpu下时间计算 加法的归约 矩阵乘法 矩阵转置 统计数目 平方和求和 分块处理 线程相邻 多block计算 cuda编程并行归约 At ...
- 《算法竞赛入门经典》习题及反思 -<2>
数组 Master-Mind Hints,Uva 340 题目:给定答案序列和用户猜的序列,统计有多少数字对应正确(A),有多少数字在两个序列都出现过但位置不对. 输入包括多组数据.每组输入第一行为序 ...
- php五大运行模式CGI,FAST-CGI,CLI,ISAPI,APACHE模式
做 php 开发的应该都知道 php 运行模式概念吧,本文将要和大家分享的是关于php目前比较常见的五大运行模式:包括cgi .fast-cgi.cli.isapi.apache模块的DLL ,下面作 ...
- python 加密与解密
加密算法分类 对称加密算法: 对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥 发送方和接收方需要持有同一把密钥,发送消息和接收消息均使用该密钥. 相对于非对称加密,对称加密具有 ...
- WZY社区
WZY社区是我自己做的一个网站,后面会详细更新,敬请关注!