博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU1312_Red and Black_广搜
阅读量:5250 次
发布时间:2019-06-14

本文共 1153 字,大约阅读时间需要 3 分钟。

题目大意: 一个地图里面有三种元素,分别为"@",".","#",其中@为人的起始位置,"#"可以想象为墙,然后.为可以走的空地,求人可以走的最大点数。 解题思路: 好吧,搜索入门题,直接广度搜索,标志入队的次数。入队的次数即为行走的步数。 代码:
#include#includeconst int MAX=25;using namespace std;typedef struct node{	int x,y;	int step;}N;int c,r;bool visited[MAX][MAX];char map[MAX][MAX];int dir[4][2]={
{-1,0},{0,1},{1,0},{0,-1}};//上,右,下,左int step;void init(){ memset(visited,false,sizeof(visited)); step=0;}int BFS(int sx,int sy){ queue Q; N pre,cur; pre.x=sx; pre.y=sy; pre.step=1; visited[pre.x][pre.y]=true; Q.push(pre); while(!Q.empty()) { pre=Q.front(); Q.pop(); step++; for(int i=0;i<4;i++) { cur=pre; cur.x=pre.x+dir[i][0]; cur.y=pre.y+dir[i][1]; if(cur.x>=1 && cur.x<=r && cur.y>=1 && cur.y<=c && visited[cur.x][cur.y]==false && map[cur.x][cur.y]=='.') { visited[cur.x][cur.y]=true; cur.step++; Q.push(cur); } } } return step;}int main(void){ while(scanf("%d%d",&c,&r),r||c) { int sx,sy; for(int i=1;i<=r;i++) { scanf("%s",map[i]+1); for(int j=1;j<=c;j++) { if(map[i][j]=='@') { sx=i; sy=j; } } } init(); int ans=BFS(sx,sy); cout<

转载于:https://www.cnblogs.com/cchun/archive/2011/12/06/2520203.html

你可能感兴趣的文章
python--中的文件操作
查看>>
C# 如何从List集合当中取出子集合
查看>>
如何通过binlog获取我们想要的MySql语句?
查看>>
一线开发读CLR --- 写在最前面
查看>>
Android(java)学习笔记176: 远程服务的应用场景(移动支付案例)
查看>>
poj2255Tree Recovery【二叉树重构】
查看>>
(21)模型层 -ORM之msql 聚合查询,F和Q(与、或、非查询)、分组查询
查看>>
tcpcopy 流量复制工具
查看>>
HttpClient 教程 (五)
查看>>
vue和react的区别
查看>>
PHP文件包含漏洞利用
查看>>
document.documentElement和document.body区别介绍
查看>>
Cocos2d-x中Vector使用
查看>>
第十一次作业
查看>>
mybatis CRUD
查看>>
负载均衡策略
查看>>
Go 语言的基本数据类型
查看>>
校友聊场景调研
查看>>
设计模式第一次作业
查看>>
Linux系统中用户身份与文件权限
查看>>