BFS AOJ 0558 Chess
AOJ 0558 Chess http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0558
在H * W的地图上有N个奶酪工厂,每个工厂分别生产硬度为1-N的奶酪。有一只老鼠准备从出发点吃遍每一个工厂的奶酪。老鼠有一个体力值,初始时为1,每吃一个工厂的奶酪体力值增加1(每个工厂只能吃一次),且老鼠只能吃硬度不大于当前体力值的奶酪。
老鼠从当前格到上下左右相邻的无障碍物的格需要时间1单位,有障碍物的格不能走。走到工厂上时即可吃到该工厂的奶酪,吃奶酪时间不计。问吃遍所有奶酪最少用时。
输入:第一行三个整数H(1 <= H <= 1000)、W(1 <= W <=1000)、N(1 <= N <= 9),之后H行W列为地图, “.“为空地, ”X“为障碍物,”S“为老鼠洞, 1-N代表硬度为1-N的奶酪的工厂。输出最少用时。
样例输入:
4 5 2
.X..1
....X
.XX.S
.2.X.
样例输出:
12
#include<iostream>
#include<queue>
using namespace std; typedef struct{
int x;
int y;
}P;//表示坐标 char graph[][];
P aim[];
P s,g;//s起点,g终点
int N,W,H;
int vis[][]; //用来存储距离
int dx[]={,,-,},dy[]={,,,-}; int bfs(P s,P g); int main(){
int i,j,t,step=;
cin>>H>>W>>N; for(i=;i<H;i++)
for(j=;j<W;j++){
cin>>graph[i][j];
if(graph[i][j]<=''&&graph[i][j]>=''){
t=graph[i][j]-'';
aim[t].x=i;
aim[t].y=j;
} //把1-N的坐标保存在 aim数组中
else if(graph[i][j]=='S'){
s.x=i;
s.y=j;
graph[i][j]='.';
}//得到最初的起点
} for(i=;i<=N;i++){
g.x=aim[i].x;
g.y=aim[i].y;//1-N ,从小到大,每次把一个 作为终点
step+=bfs(s,g);
s.x=g.x;
s.y=g.y;//到达这个终点后变终点为起点
graph[g.x][g.y]='.';
} cout<<step<<endl;
} int bfs(P s,P g){
queue<P> que;
P n; for(int i=;i<H;i++)
for(int j=;j<W;j++)
vis[i][j]=-; que.push(s);
vis[s.x][s.y]=; while(que.size()){ P p=que.front();
que.pop();
if(p.x==g.x&&p.y==g.y)
break; for(int i=;i<;i++){
n.x=p.x+dx[i];
n.y=p.y+dy[i];//向四方漫射
if(<=n.x&&n.x<H&&<=n.y&&n.y<W&&graph[n.x][n.y]!='X'&&vis[n.x][n.y]==-){
que.push(n);
vis[n.x][n.y]=vis[p.x][p.y]+;
}
}
}
return vis[g.x][g.y];
}
BFS AOJ 0558 Chess的更多相关文章
- AOJ 0558 Cheese【BFS】
在H * W的地图上有N个奶酪工厂,分别生产硬度为1-N的奶酪.有一只吃货老鼠准备从老鼠洞出发吃遍每一个工厂的奶酪.老鼠有一个体力值,初始时为1,每吃一个工厂的奶酪体力值增加1(每个工厂只能吃一次), ...
- AOJ 0558 Cheese
Cheese Time Limit : 8 sec, Memory Limit : 65536 KB チーズ (Cheese) 問題 今年も JOI 町のチーズ工場がチーズの生産を始め,ねずみが巣から ...
- AOJ 0558 广度优先搜索
题意:在 H * W 的地图里有 N 个工厂,每个工厂分别生产硬度为1-N 的奶酪,有一只老鼠准备把所有奶酪都吃完.老鼠的初始体力值为1,每吃一个奶酪体力值加 1.已知老鼠不能吃硬度大于当前体力值的奶 ...
- HDU_1401——分步双向BFS,八进制位运算压缩,map存放hash
Problem Description Solitaire is a game played on a chessboard 8x8. The rows and columns of the ches ...
- ProgrammingContestChallengeBook
POJ 1852 Ants POJ 2386 Lake Counting POJ 1979 Red and Black AOJ 0118 Property Distribution AOJ 0333 ...
- AOJ 0121: Seven Puzzle【BFS】
From: AOJ 0121 思路:与前几题的bfs不同,这次的bfs没有明确的移动对象,看似任意一个数都可以当成对象移动.这时我们只需要抓住一个格子就行,比如我们把0作为移动对象,那么0在地图中漫游 ...
- AOJ.865 青铜莲花池 (BFS)
AOJ.865 青铜莲花池 (BFS) 题意分析 典型的BFS 没的说 代码总览 #include <iostream> #include <cstdio> #include ...
- AOJ.866 飞越原野 (三维BFS)
AOJ.866 飞越原野 (三维BFS) 题意分析 点我挑战题目 相比于普通的BFS,要多一维来记录当前剩余的体力.而且还要额外的一层循环来处理,飞过的路程. 代码总览 #include <io ...
- AOJ 0121: Seven Puzzle (BFS DP STL 逆向推理)(转载)
转载自: http://m.blog.csdn.net/blog/Enjoying_Science/42008801 题目链接:http://acm.hust.edu.cn/vjudge/probl ...
随机推荐
- BizTalk动手实验(十三)EDI解决方案开发配置
1 课程简介 通过本课程熟悉EDI解决文案的开发与配置,本动手实验步骤及内容采用微软官方SDK完成,学员在实验过程中结合官方教程来完成本实验 2 准备工作 从BizTalk安装目录的SDK中将EDI ...
- 让你的网站秒开 为IIS启用“内容过期”
让你的网站秒开,为IIS启用“内容过期” 什么是内容过期? 当用户第一次访问你的网站,浏览器从你的网站主机下载内容,如果用户第二次访问你的网站,浏览器从缓存读取内容.你知道浏览器从缓存读取网页有多快吗 ...
- sphinx网址
http://www.phperz.com/article/14/0615/95.htmlhttp://www.kuqin.com/shuoit/20141101/342963.htmlhttp:// ...
- Windows内核 字符串基本操作
驱动程序中字符串操作涉及到ASCII字符串.宽字符串,还有DDK定义的ANSI_STRING数据结构和UNICODE_STRING数据结构. 1)ASCII字符串和宽字符串 在应用程序中使用两种字符: ...
- 【iCore3 双核心板_FPGA】实验十五:基于USART的ARM与FPGA通信实验
实验指导书及代码包下载: http://pan.baidu.com/s/1c1RbE5E iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...
- java 中设置session失效时间
程序中session都有一个默认的过期时间,其中tomcat中的默认时间为30分钟,根据需要我们可以去手动设置session的过期时间,以下是设置session的过期时间的三个方法:1.在tomcat ...
- PHP unset 后恢复数组索引
unset($arr[3]); $arr = array_values($arr); array_values() 函数返回一个包含给定数组中所有键值的数组,但不保留键名,被返回的数组将使用数值键,从 ...
- 【后台测试】手把手教你jmeter压测
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5611555.html 我知道我迟早是要踏上了后台测试之路 ...
- 贴片三极管-MOS管型号手册
详细请查阅PDF: http://files.cnblogs.com/files/BinB-W/贴片三极管-MOS管型号手册.pdf
- MySql超新手入门
https://www.kancloud.cn/thinkphp/mysql-tutorial/36457