题目链接:

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=85

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

这两个题只有输入输出形式不一样。ZOJ的麻烦一点,这里用的ZOJ的输入输出方式

解题报告:

1、输入方式sscanf(line,"%d%d",&a,&b);表示在文本line中提取两个整形数据到a,b中

2、从外星人的角度来看,就是搜索单源最短路径,采用的方式是广搜。

3、删除某个点,从入口进入(0号房间),查看是否可以走到外星人的位置,采用深搜。

4、在删除哪一个点时,用枚举即可。

#include <stdio.h>
#include <string.h>
#include <queue> using namespace std; #define INF 0x3f3f3f3f
#define MAXN 105 int n,et;///n个房间,外星人所在的房间
bool data[MAXN][MAXN]; ///图的邻接矩阵
int dis[MAXN]; ///各点到外星人的房间的最短路径长度
int used[MAXN]; ///广度优先搜索,站在外星人的角度看,就是单源最短路径问题
///搜索各个房间到外星人最短距离
void bfs_path()
{
memset(dis,INF,sizeof(dis));
dis[et]=; queue <int>q;
q.push(et); int x;
while(!q.empty())
{
x=q.front(); ///取队列头结点
q.pop();
for(int i=;i<n;i++)
{
///经过房间x到外星人比从房间i到ET更近
if(data[i][x]&&dis[x]+<dis[i])
{
q.push(i);
dis[i]=dis[x]+;
}
}
}
} ///去掉房间i,从房间0出发,判断能否到达外星人房间
///深度优先搜索
///形参id是当前正在搜索的房间编号
int dfs_search(int id)
{
///成功到达外星人房间
if(id==et) return ; ///房间id已经搜索
used[id]=; ///搜索下一个出口
for(int i=;i<n;i++)
{
if(!used[i]&&data[id][i])
{
if(dfs_search(i)) return ;
}
} return ;
} int main()
{
int T,iCase;
char line[];
int a,b;///源房间,目标房间
scanf("%d",&T);
for(iCase=;iCase<T;iCase++)
{
scanf("%d%d\n",&n,&et);
memset(data,false,sizeof(data)); ///读取数据
while(gets(line))
{
if(strcmp(line,"")==)
break;
sscanf(line,"%d%d",&a,&b);
data[a][b]=true;
} bfs_path(); ///枚举搜索最优解
int d=dis[]; int room=; for(int i=;i<n;i++)
{
if(i==et) continue; memset(used,,sizeof(used));
///设置在房间i,也就是说在图中将房间i拿掉
used[i]=; if(!dfs_search()&&dis[i]<d)
{
room=i;
d=dis[i];
}
} if(iCase) printf("\n");
printf("Put guards in room %d.\n",room);
}
return ;
}

广搜,深搜,单源最短路径,POJ(1130),ZOJ(1085)的更多相关文章

  1. Dijkstra单源最短路径,POJ(2387)

    题目链接:http://poj.org/problem?id=2387 Dijkstra算法: //求某一点(源点)到另一点的最短路,算法其实也和源点到所有点的时间复杂度一样,O(n^2); 图G(V ...

  2. POJ 1135 -- Domino Effect(单源最短路径)

     POJ 1135 -- Domino Effect(单源最短路径) 题目描述: 你知道多米诺骨牌除了用来玩多米诺骨牌游戏外,还有其他用途吗?多米诺骨牌游戏:取一 些多米诺骨牌,竖着排成连续的一行,两 ...

  3. Til the Cows Come Home(poj 2387 Dijkstra算法(单源最短路径))

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 32824   Accepted: 11098 Description Bes ...

  4. 【算法导论】单源最短路径之Bellman-Ford算法

    单源最短路径指的是从一个顶点到其它顶点的具有最小权值的路径.我们之前提到的广度优先搜索算法就是一种无权图上执行的最短路径算法,即在所有的边都具有单位权值的图的一种算法.单源最短路径算法可以解决图中任意 ...

  5. 经典贪心算法(哈夫曼算法,Dijstra单源最短路径算法,最小费用最大流)

    哈夫曼编码与哈夫曼算法 哈弗曼编码的目的是,如何用更短的bit来编码数据. 通过变长编码压缩编码长度.我们知道普通的编码都是定长的,比如常用的ASCII编码,每个字符都是8个bit.但在很多情况下,数 ...

  6. Dijkstra 单源最短路径算法

    Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年 ...

  7. Bellman-Ford 单源最短路径算法

    Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法.该算法由 Richard Bellman 和 Leste ...

  8. 洛谷P3371 【模板】单源最短路径

    P3371 [模板]单源最短路径 282通过 1.1K提交 题目提供者HansBug 标签 难度普及/提高- 提交  讨论  题解 最新讨论 不萌也是新,老司机求带 求看,spfa跑模板40分 为什么 ...

  9. 单源最短路径算法---Dijkstra

    Dijkstra算法树解决有向图G=(V,E)上带权的单源最短路径问题,但是要求所有边的权值非负. 解题思路: V表示有向图的所有顶点集合,S表示那么一些顶点结合,从源点s到该集合中的顶点的最终最短路 ...

随机推荐

  1. my30_表碎片整理

    确认表的类型与存储引擎,是否全部是innodb select TABLE_SCHEMA,TABLE_NAME,TABLE_TYPE,ENGINE,VERSION,ROW_FORMAT,TABLE_RO ...

  2. 几种经过整理的文件上传压缩和前台js压缩的方法

    /** * 图片压缩上传 * @param $im,图片资源 * @param int $maxwidth,最大宽度,超过这个宽度则进行压缩 * @param int $maxheight,最大高度, ...

  3. Django权限1

    1.权限,说白了就是你有资格访问这个网址,而别人每一资格:你有资格进行增删改查,而别人只有查的权限 2.新建是3张表: #用户表 class User(models.Model): name = mo ...

  4. is 和 == 区别

    == 和 is 的区别 == 比较 比较的是两个值 适用于 列表​a = '[1:2]'b = '[1:2]'print(a == b) #True​​​​ 字典a = '{1,2,3}'b = '{ ...

  5. gcc 4.9编译

    参考 http://blog.csdn.net/hzhxxx/article/details/28634893

  6. Murano Weekly Meeting 2016.06.28

    Meeting time: 2016.June.28 1:00~2:00 Chairperson:  Kirill Zaitsev, from Mirantis Meeting summary: 1. ...

  7. c++隐式类型转换和explicit

    什么是隐式转换? 众所周知,C++的基本类型中并非完全的对立,部分数据类型之间是可以进行隐式转换的. 所谓隐式转换,是指不需要用户干预,编译器私下进行的类型转换行为.很多时候用户可能都不知道进行了哪些 ...

  8. GOPS 2018全球运维大会上海站 参会感悟梳理

    今天遇到很多优秀的讲师.业界的大伽,很开心 现在把get到的信息梳理一下:(1)想解决性能问题,一定要在缓存上下功夫:[nginx上有好多文章可以做,真是博大精深呢<深入理解Nginx:模块开发 ...

  9. iis部署网站打不开

    事件查看器 1.crypt32报错 2.ASP.NET 2.0错误 解决办法: 1.crpt32报错,根本原因是计算机无法连接更新根证书所致,可能造成死循环. [1]必须连接到 Internet 或关 ...

  10. MySQL查询上个月数据

    SELECT * FROM order o WHERE o.payTime BETWEEN DATE_FORMAT(DATE_ADD(NOW(),INTERVAL MONTH),'%Y-%m-01') ...