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

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
#include <set>
#define Mod 1000000007
#define INT 2147483647
#define pi acos(-1.0)
#define eps 1e-3
#define lll __int64
#define ll long long
using namespace std;
#define N 100007 const int INF = Mod;
vector<pair<int,int> > edge[N];
set<pair<int,int> > que;
int a[][],n;
int d[N],pre[N]; void print_path(int s,int v)
{
if(v == s)
printf("(%d, %d)\n",(s-)/,(s%+-)%);
else
{
print_path(s,pre[v]);
printf("(%d, %d)\n",(v-)/,(v%+-)%);
}
} int ok(int x,int y)
{
if(x >= && x < && y >= && y < )
return ;
return ;
} void SPFA()
{
int i;
for(i=;i<=n;i++)
d[i] = INF;
d[] = ;
que.insert(make_pair(d[],));
while(!que.empty())
{
int v = que.begin()->second;
que.erase(que.begin());
for(i=;i<edge[v].size();i++)
{
int to = edge[v][i].first;
int cost = edge[v][i].second;
if(d[v] + cost < d[to])
{
que.erase(make_pair(d[to],to));
d[to] = d[v] + cost;
pre[to] = v;
que.insert(make_pair(d[to],to));
}
}
}
print_path(,n);
} int main()
{
int i,j;
for(i=;i<;i++)
for(j=;j<;j++)
scanf("%d",&a[i][j]);
for(i=;i<;i++)
{
for(j=;j<;j++)
{
if(a[i][j] == )
{
int ka = i* + j + ,kb;
if(ok(i+,j) && a[i+][j] == )
{
kb = ka + ;
edge[ka].push_back(make_pair(kb,));
}
if(ok(i,j+) && a[i][j+] == )
{
kb = ka+;
edge[ka].push_back(make_pair(kb,));
}
if(ok(i-,j) && a[i-][j] == )
{
kb = ka-;
edge[ka].push_back(make_pair(kb,));
}
if(ok(i,j-) && a[i][j-] == )
{
kb = ka-;
edge[ka].push_back(make_pair(kb,));
}
}
}
}
n = ;
SPFA();
return ;
}

POJ 1847 Tram --set实现最短路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. poj 1847 Tram【spfa最短路】

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

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

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

  5. POJ 1847 Tram (最短路)

    Tram 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/N Description Tram network in Zagreb ...

  6. 【POJ】3255 Roadblocks(次短路+spfa)

    http://poj.org/problem?id=3255 同匈牙利游戏. 但是我发现了一个致命bug. 就是在匈牙利那篇,应该dis2单独if,而不是else if,因为dis2和dis1相对独立 ...

  7. poj 1847 Tram

    http://poj.org/problem?id=1847 这道题题意不太容易理解,n个车站,起点a,终点b:问从起点到终点需要转换开关的最少次数 开始的那个点不需要转换开关 数据: 3 2 1// ...

  8. (简单) POJ 1847 Tram,Dijkstra。

    Description Tram network in Zagreb consists of a number of intersections and rails connecting some o ...

  9. POJ 1847 Tram【Floyd】

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

随机推荐

  1. PHP学习笔记:用php读取xml文件

    xml已经被json逐渐替代,现在用的api都是用貌似用的json,但是有些老的网站还是在用xml. 这里默认xml文件为:address.xml,存放在和读取的php文件相同级别目录,xml内容如下 ...

  2. 防止用户误操作退出APP的处理

    /** * 软件退出的处理:先跳到第一个页面,再点提示“再点一次退出”,2秒内再点一次退出 * 防止用户误操作 */ private boolean isExist=false; private Ha ...

  3. 【背景建模】PBAS

    Pixel-Based Adaptive Segmenter(PBAS)检测算法,是基于像素的无参数模型,该算法结合了SACON和VIBE两个算法的优势,并在这两个算法的基础上改进而来,SACON和V ...

  4. 【FFmpeg】ffplay播放rtsp视频流花屏问题

    问题描述:ffplay播放rtsp视频流时,播放过程中随机出现花屏现象. 基本流程学习:阅读ffplay源码,熟悉其播放rtsp视频流的基本流程. 在ffplay源码阅读和分析的基础上,画出了其播放r ...

  5. J2EE分布式架构及MySQL交流群

    J2EE分布式架构及MySQL交流群:577913057

  6. windbg定位死锁

    操作系统对死锁的描述如下: 所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去. 那么为什么会产生死锁呢? 1.因为系统资源不足. ...

  7. 单例(Singleton pattern)模式的七种写法

    转载请注明出处:http://www.cnblogs.com/smbk/ One: public class Singleton { private static Singleton instance ...

  8. [Xamarin.iOS] Visual Studio中Xamarin.iOS项目,无法加入PCL项目参考、NuGet组件参考

    [Xamarin.iOS] Visual Studio中Xamarin.iOS项目,无法加入PCL项目参考.NuGet组件参考 解决方案 目前Visual Studio中最新版本的Xamarin.iO ...

  9. js判断客户端平台

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Vue混合

    gitHub地址: https://github.com/lily1010/vue_learn/tree/master/lesson13 一 定位 混合以一种灵活的方式为组件提供分布复用功能.混合对象 ...