码迷,mamicode.com
首页 > 其他好文 > 详细

hdoj 1312 Red and Black 【BFS】

时间:2014-08-13 22:31:17      阅读:301      评论:0      收藏:0      [点我收藏+]

标签:bfs

题意:一共有四个方向,从’@‘出发,找能到达‘.’的个数, #是不能通过的.

策略:广搜。

这道题属于最简单的bfs了。

代码:

#include<stdio.h>
#include<string.h>
#include<queue>
using std::queue;
bool vis[25][25];
char s[25][25];
int n, m;
int ans = 0;
struct node{
	int x, y;
};
node st;
const int dir[4][2] = {0, 1, 0, -1, 1, 0, -1, 0};
int limit(node tmp)
{
	return (s[tmp.x][tmp.y]!='#'&&tmp.x>=0&&tmp.x<m&&tmp.y>=0&&tmp.y<n);
}
void bfs()
{
	memset(vis, 0, sizeof(vis));
	vis[st.x][st.y] = 1;
	int i, j;
	queue<node> q;
	q.push(st);
	while(!q.empty()){
		node v = q.front();
		for( i = 0; i < 4; i ++){
			node u;
			u.x = v.x+dir[i][0];
			u.y = v.y+dir[i][1];
			if(!vis[u.x][u.y]&&limit(u)){
				++ans;
				vis[u.x][u.y] = 1;
				q.push(u);
			}
		}
		q.pop();
	}
}
int main()
{
	int i, j;
	while(scanf("%d%d", &n, &m), n||m){
		for(i = 0; i < m; i ++){
			scanf("%s", s[i]);
		}
		for(i = 0; i <m; i ++){
			for(j = 0; j < n; j ++){
				if(s[i][j] == '@'){
					st.x = i;
					st.y = j;
					break;
				}
			}
		}
		ans = 1;
		bfs();
		printf("%d\n", ans);
	}
	return 0;
}


hdoj 1312 Red and Black 【BFS】,布布扣,bubuko.com

hdoj 1312 Red and Black 【BFS】

标签:bfs

原文地址:http://blog.csdn.net/shengweisong/article/details/38542161

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!