http://poj.org/problem?id=1847

一个水题,用来熟悉熟悉spfa和floyd的。

题意:有m条的铁路,要从x,到y,

之后分别就是条铁路与其他铁路的交点。第一个输入的为有n个交点。之后第一个输入的点,当前铁路到这个点是不要转向的,也就是权值为0,其余的权值都为1,求从x到y的最短路,如果到不了输出-1

裸的floyd和spfa;

 #include <stdio.h>
#include <string.h>
#define inf 0x3f3f int graph[][];
int m,n,x,y; void floyd()
{
int k,i,j;
for( k = ; k <= m ; k++ )
for( i = ; i <= m ; i++ )
for( j = ; j <= m ; j++)
if( graph[ i ][ j ] > graph[ i ][ k ] + graph[ k ][ j ] )
graph[ i ][ j ] = graph[ i ][ k ] + graph[ k ][ j ];
} int main()
{
// freopen("in.txt","r",stdin);
int tmp;
while(scanf("%d%d%d",&m,&x,&y)!=EOF)
{
for( int i = ; i <= m ; i++ )
for( int j = ; j <= m ; j++ )
if( i == j )
graph[ i ][ j ] = ;
else
graph[ i ][ j ] = inf;
for( int i = ; i <= m ; i++ )
{
scanf("%d",&n);
for( int j = ;j <= n ; j++ )
{
scanf("%d",&tmp);
if( j == )
graph[ i ][ tmp ] = ;
else
graph[ i ][ tmp ] = ;
}
}
floyd();
if( graph[ x ][ y ] != inf)
printf("%d\n",graph[ x ][ y ]);
else
printf("-1\n");
}
return ;
}

floyd

 #include <stdio.h>
#include <string.h>
#include <queue>
#define maxn 101
#define inf 0x3f3f3f3f using namespace std; int m,x,n,y,pos,head[ maxn ]; int ans , dist[ maxn ]; bool vis[ maxn ]; struct note {
int v,w,next;
}edge[maxn]; void init()
{
pos = ;
for(int i = ;i <= n ; i++ ) dist[ i ] = inf;
memset( head , - , sizeof( head ) );
memset( vis , false ,sizeof( vis ) );
} void add(int x,int v,int w)
{
edge[ pos ].v = v;
edge[ pos ].w = w;
edge[ pos ].next = head[ x ];
head[ x ] = pos++;
} void spfa()
{
queue<int >s;
s.push(x);
vis[ x ] = true;
dist[ x ] = ;
while(!s.empty())
{
int tmp = s.front();
s.pop();
vis [ tmp ] = false;
for( int i = head[ tmp ] ; i != - ; i = edge[ i ].next )
{
if( dist[ edge[ i ].v ] > dist[ tmp ] + edge[ i ].w)
{
dist[ edge[ i ].v ] = dist[ tmp ] + edge[ i ].w;
if( !vis[ edge[ i ].v ] )
{
s.push( edge[ i ].v );
vis[ edge[ i ].v ] =true;
}
} }
}
} int main()
{
// freopen("in.txt","r",stdin);
while(~scanf("%d%d%d",&n,&x,&y))
{
init();
int tmp;
for(int j = ; j <= n ; j++ )
{
scanf("%d",&m);
for(int i = ; i <= m ; i++ )
{
scanf("%d",&tmp);
if( i == ) add( j , tmp , );
else add( j , tmp , );
}
}
spfa();
if( dist [ y ] == inf ) printf("-1\n");
else printf("%d\n",dist[ y ]);
}
return ;
}

spfa

poj 1847( floyd && spfa )的更多相关文章

  1. POJ 1847 Tram (最短路径)

    POJ 1847 Tram (最短路径) Description Tram network in Zagreb consists of a number of intersections and ra ...

  2. 最短路 || POJ 1847 Tram

    POJ 1847 最短路 每个点都有初始指向,问从起点到终点最少要改变多少次点的指向 *初始指向的那条边长度为0,其他的长度为1,表示要改变一次指向,然后最短路 =========高亮!!!===== ...

  3. ACM/ICPC 之 最短路-Floyd+SPFA(BFS)+DP(ZOJ1232)

    这是一道非常好的题目,融合了很多知识点. ZOJ1232-Adventrue of Super Mario 这一题折磨我挺长时间的,不过最后做出来非常开心啊,哇咔咔咔 题意就不累述了,注释有写,难点在 ...

  4. poj 1847 最短路简单题,dijkstra

    1.poj  1847  Tram   最短路 2.总结:用dijkstra做的,算出a到其它各个点要改向的次数.其它应该也可以. 题意: 有点难懂.n个结点,每个点可通向ki个相邻点,默认指向第一个 ...

  5. [最短路径SPFA] POJ 1847 Tram

    Tram Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 14630 Accepted: 5397 Description Tra ...

  6. POJ 1847 Tram --set实现最短路SPFA

    题意很好懂,但是不好下手.这里可以把每个点编个号(1-25),看做一个点,然后能够到达即为其两个点的编号之间有边,形成一幅图,然后求最短路的问题.并且pre数组记录前驱节点,print_path()方 ...

  7. POJ 1847 Tram【Floyd】

    题意:给出n个站点,每个站点都有铁路通向其他站点 如果当前要走得路恰好是该站点的开关指向的铁路,则不用扳开关,否则要手动扳动开关,给出起点和终点,问最少需要扳动多少次开关 输入的第一行是n,start ...

  8. poj 1847 Tram【spfa最短路】

    Tram Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 12005   Accepted: 4365 Description ...

  9. Tram POJ - 1847 spfa

    #include<iostream> #include<algorithm> #include<queue> #include<cstdio> #inc ...

随机推荐

  1. js实现点击增加文本输入框

    html代码: <ul id="ulid21" > <li id="li11" >问卷选项设置:</li> </ul& ...

  2. Linux消息队列应用

    #include"sys/types.h" #include "sys/msg.h" #include "unistd.h" #includ ...

  3. aop测试jdk代理机制

    //测试jdk代理机制 @Test public void testProxy(){ final UsbDisk usbDisk = new UsbDisk(); //类加载器,接口,匿名内部类 // ...

  4. nanosleep() -- 更精确的延迟 -----一个使用用例

    [常规] nanosleep() -- 更精确的延迟 [复制链接]     beyes 4220 主题 5152 帖子 3万 积分 GROAD 曲径通幽,安觅芳踪. 积分 30607 发消息 电梯直达 ...

  5. linux文档常见后缀名

    echo "Start bakup mdsoss Source code ..."_Name="templatecdr_src_"`date +%Y%m%d%H ...

  6. MessageFormat用法

    MessageFormat用来格式化一个消息,通常是一个字符串,比如: String str = "I'm not a {0}, age is {1,number,short}", ...

  7. Web渗透测试使用Kali Linux(一)渗透测试概要及环境部署

    渗透测试是利用已经发现的漏洞,采用恶意黑客的惯用手段来尝试对漏洞进行攻击. Kali Linux是BackTrack的进化版,是Linux的衍生版本,专门开发用作渗透测试,其中提供了很多的渗透测试工具 ...

  8. 几个主流java连接池

    池(Pool)技术在一定程度上可以明显优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销.这里所说的池是一种广义上的池,比如数据库连接池.线程池.内存池.对象池等.其中,对象池可以看成保存对 ...

  9. iSCSI配置流程

    Windows群集两个节点:分别在SQL01和SQL02设置连接共享磁盘: 此前已经在存储服务器通过StarWind创建了三个虚拟磁盘:Quemon+data+backup:starwind安装请参考 ...

  10. hadoop 集群 加入一个新的存储节点和删除一个计算节点需要刷新集群状态命令

    加入一个新的存储节点和删除一个计算节点需要刷新集群状态命令 方式1:静态添加datanode,停止namenode方式 1.停止namenode 2.修改slaves文件,并更新到各个节点3.启动na ...