| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
BFS一次AC o(∩_∩)o 附代码#include <iostream>
#include <queue>
using namespace std;
int main()
{
const int D = 8;
const int D_half = D / 2;
const int dy[D] = {-1, 1, 0, 0, -1, 1, -1, 1};
const int dx[D] = {0, 0, -1, 1, -1, -1, 1, 1};
const int N = 32;
char grid[N][N];
char visited[N][N];
int row, column, mouse_row, mouse_column;
while (cin>>row>>column>>mouse_row>>mouse_column && row != 0)
{
memset(grid, 0, sizeof(char) * N * N);
memset(visited, 0, sizeof(char) * N * N);
for (int i=1; i<=row; i++)
{
cin>>(&grid[i][1]);
}
if (grid[mouse_row][mouse_column] != 'X')
{
cout<<0<<endl;
continue;
}
queue<pair<int,int>> q;
q.push(pair<int,int>(mouse_row,mouse_column));
visited[mouse_row][mouse_column] = 1;
int perimeter = 0;
while (!q.empty())
{
pair<int,int> p = q.front();
q.pop();
for (int i=0; i<D; i++)
{
int y = p.first + dy[i];
int x = p.second + dx[i];
if (y >= 1 && y <= row && x >= 1 && x <= column && grid[y][x] == 'X')
{
if (visited[y][x] == 0)
{
q.push(pair<int,int>(y, x));
visited[y][x] = 1;
}
}
else
{
if (i < D_half)
{
perimeter++;
}
}
}
}
cout<<perimeter<<endl;
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator