广搜,深搜,单源最短路径,POJ(1130),ZOJ(1085)
题目链接:
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)的更多相关文章
- Dijkstra单源最短路径,POJ(2387)
题目链接:http://poj.org/problem?id=2387 Dijkstra算法: //求某一点(源点)到另一点的最短路,算法其实也和源点到所有点的时间复杂度一样,O(n^2); 图G(V ...
- POJ 1135 -- Domino Effect(单源最短路径)
POJ 1135 -- Domino Effect(单源最短路径) 题目描述: 你知道多米诺骨牌除了用来玩多米诺骨牌游戏外,还有其他用途吗?多米诺骨牌游戏:取一 些多米诺骨牌,竖着排成连续的一行,两 ...
- Til the Cows Come Home(poj 2387 Dijkstra算法(单源最短路径))
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 32824 Accepted: 11098 Description Bes ...
- 【算法导论】单源最短路径之Bellman-Ford算法
单源最短路径指的是从一个顶点到其它顶点的具有最小权值的路径.我们之前提到的广度优先搜索算法就是一种无权图上执行的最短路径算法,即在所有的边都具有单位权值的图的一种算法.单源最短路径算法可以解决图中任意 ...
- 经典贪心算法(哈夫曼算法,Dijstra单源最短路径算法,最小费用最大流)
哈夫曼编码与哈夫曼算法 哈弗曼编码的目的是,如何用更短的bit来编码数据. 通过变长编码压缩编码长度.我们知道普通的编码都是定长的,比如常用的ASCII编码,每个字符都是8个bit.但在很多情况下,数 ...
- Dijkstra 单源最短路径算法
Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年 ...
- Bellman-Ford 单源最短路径算法
Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法.该算法由 Richard Bellman 和 Leste ...
- 洛谷P3371 【模板】单源最短路径
P3371 [模板]单源最短路径 282通过 1.1K提交 题目提供者HansBug 标签 难度普及/提高- 提交 讨论 题解 最新讨论 不萌也是新,老司机求带 求看,spfa跑模板40分 为什么 ...
- 单源最短路径算法---Dijkstra
Dijkstra算法树解决有向图G=(V,E)上带权的单源最短路径问题,但是要求所有边的权值非负. 解题思路: V表示有向图的所有顶点集合,S表示那么一些顶点结合,从源点s到该集合中的顶点的最终最短路 ...
随机推荐
- Sequelize Docs 中文文档 v4
Sequelize Docs 中文文档 v4 写在前面 Sequelize 是一个基于 promise 的 Node.js ORM, 目前支持 Postgres, MySQL, SQLite 和 Mi ...
- 2019.03.21 读书笔记 ==与Equals
首先得出一个结论:==是比较变量内存的数据,Equals是值比较.但是他们都能被重写,所以object又增加了一个RefrenceEquals不可被重写,只比较数据: [ReliabilityCont ...
- python 之serial
一 先按照 pywin32:pywin32是一个非常强大的Python扩展库,是Python调用Windows系统底层功能的最佳接口,不安装这个按照pyserial也没有用 二 按装pyserial ...
- (转)shell中各种括号的作用()、(())、[]、[[]]、{}
shell中各种括号的作用().(()).[].[[]].{} 原文:http://www.jb51.net/article/60326.htm http://blog.csdn.net/good_h ...
- vue脚手架 && 实例
什么是vue脚手架? 即可以快速构建vue项目的工具,通过它,我们可以将vue项目所需要的文件等安装完成. 为什么要是用vue脚手架,优点何在? 因为创建一个vue项目需要很多的依赖,文件的设置等,而 ...
- ZK使用
1. 关注问题 1. zookeeper集群如何保证请求的均匀分布? 由client建立连接时会随机取server保证均匀分布, 2.已布置完成的ZK集群如何扩容? 修改配置后逐台重启即可 2. ZK ...
- BoostrapTable-本地模式(一次性加在所有数据)
直接上代码 数据: [ { "id": "1001", "name": "yyq", "isAdmin&quo ...
- MVC execl 导入导出
MVC execl 导入导出 <input id="xls" name="xls" type="file" style="w ...
- input type="image" 提交表单
提到<input type="image" />,说起来有些惭愧.之前的工作基本每周都要制作两到三个注册用户的网页.其中就用它提交表单. 那个时候我想当然的以为这是用 ...
- Java并发包concurrent类简析
1.ConcurrentHashMap ConcurrentHashMap是线程安全的HashMap的实现. 1)添加 put(Object key , Object value) Concurren ...