题目链接:

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 ;
}

最新文章

  1. SQL 检查 是否存在 表 临时表
  2. RMAN异机恢复遭遇ORA-01547、ORA-01152、ORA-01110错误案例
  3. Python之控制台输入密码的方法
  4. iOS工程集成支付宝错误Undefined symbols for architecture armv7
  5. Android+Sqlite 实现古诗阅读应用(一)
  6. Java中的IO流系统详解(转载)
  7. 搭建和使用Docker私有仓库
  8. html元素拖拽
  9. centos7关闭防火墙(转)
  10. jmeter 实现DB数据与接口数据的匹配校验
  11. 模板引擎(smarty)知识点总结
  12. spring 应用
  13. java_oop_三大特性
  14. 浅析 JavaScript 中的 Function.prototype.bind() 方法
  15. 微服务框架surging学习之路——序列化 (转载https://www.cnblogs.com/alangur/p/10407727.html)
  16. 简单QR分解之Gram-Schmit正交化&amp;&amp;Householder变换&amp;&amp;Givens Rotation变换&amp;&amp;计算步骤
  17. pytest八:skip 跳过用例
  18. matlab中循环的使用
  19. 2019.1.23 DFMEA for
  20. 832. Flipping an Image

热门文章

  1. hadoop单机配置
  2. vue中组件传值方式汇总
  3. 在Mac上配置iTerm2+Oh-My-Zsh&amp;配置主题
  4. 剑指offer中经典的算法题之从头到尾打印链表
  5. C++之构造函数、拷贝类型
  6. Unity ContextMenu 上下文菜单
  7. centos7.3 安装cuda8.0的 坑
  8. [转]jquery 鼠标放在图片上显示图片的放大镜效果jqzoom_ev-2.3
  9. mac os 和 ubuntu 上测试工具check-0.9.10的安装
  10. pat1020. Tree Traversals (25)