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 ...
随机推荐
- CCF认证(1)
#include <iostream> #include <windows.h> using namespace std; typedef struct letter{ int ...
- SQL Server如何添加登录名
1.电脑上如果安装有SQL Server,我们在开始里面打开SQL Server Management Studio,或者以桌面的快捷方式等打开SQL Server. 2.首先以Windows身份验证 ...
- XML于JSON
XML:可拓展的标记语言(跨平台数据表现)用于保存数据 XML:标记需要关闭 :单根性 .NET中DOM常用对象: XmlDocument :一个XML文档 XmlNode:xml中的单个节点 Xml ...
- 实验一Java开发环境的熟悉
实验一Java开发环境的熟悉 实验内容 •命令行下Java程序开发 •IDEA下Java程序开发.调试 •练习(通过命令行和Eclipse两种方式实现,在Eclipse下练习调试程序) •实现凯撒密码 ...
- Bootstrap (导航、标签、面包屑导航)
导航 Bootstrap中可用的导航有相似的标记,用基类.nav开头,这是相似的部分.改变修饰类可以改变样式. <!DOCTYPE html> <html> <head& ...
- SQL Server 触发器(转)
触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 触发器对表进行插入.更新.删 ...
- php预定义变量,超全局变量,魔术方法,特殊函数变量使用
<?php /* * 本代码全部为测试函数代码,部分注释和写实例 * * 修改php.ini variables_order=”EGPCS” * 请注意$_REQUEST在优先级传参的时候会造成 ...
- Ajax 无刷新上传文件插件 uploadify 的使用
在表单中无法直接使用 Ajax 上传文件,解决的思路可以是使用插件无刷新地上传文件,返回文件上传后的地址,然后把该地址作为 Ajax 的参数传递给服务器端进行数据库处理.可以使用 uploadify ...
- Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理
Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理 作者:宋宸宁(20135315) 一.实验过程 图1 编写songchenning5315.c文件 图2 将c文件汇编成32位机器语言 ...
- android中View的GONE和INVISIBLE的原理
废话只重复两句: GONE真的隐藏: INVISIBLE不可见但是预留了View的位置: 网上千篇一律的重复着这两句话并举着例子,并没有观察本质来作区分.查看源码后得知其区别希望广大朋友能够借鉴,源码 ...