Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

50题,光棍留念,哈哈

Posted by frankLEE at 2015-05-15 15:00:24 on Problem 1111
#include <iostream>
#include <string>
using namespace std;

const int N = 25;
char grid[N][N];
bool visit[N][N];

void dfs(int height, int width, int x, int y, int &per);

int main()
{
    int height = 0, width = 0, x = 0, y = 0;
    while (1)
    {
        int perimeter = 0;
        cin >> height >> width >> x >> y;
        if (height + width + x + y == 0)  break;

        memset(visit, false, sizeof(visit));

        for (int i=1; i<=height; i++)
        {
            for (int j=1; j<=width; j++)  cin >> grid[i][j];
        }

        for (int i=0; i<=width+1; i++)
        {
            grid[0][i] = '.';
            grid[height+1][i] = '.';
        }
        for (int i=0; i<=height+1; i++)
        {
            grid[i][0] = '.';
            grid[i][width+1] = '.';
        }

        dfs(height, width, x, y, perimeter);
        cout << perimeter << endl;
    }
   
  return 0;
}

void dfs(int height, int width, int x, int y, int &per)
{   
    visit[x][y] = true;

    if (grid[x-1][y-1] == 'X' && visit[x-1][y-1] == false)
    {
        dfs(height, width, x-1, y-1, per); 
    }
    
    if (grid[x-1][y+1] == 'X' && visit[x-1][y+1] == false)
    {
        dfs(height, width, x-1, y+1, per); 
    }

    if (grid[x+1][y-1] == 'X' && visit[x+1][y-1] == false)
    {
        dfs(height, width, x+1, y-1, per); 
    }

    if (grid[x+1][y+1] == 'X' && visit[x+1][y+1] == false)
    {
        dfs(height, width, x+1, y+1, per); 
    }

    if (grid[x-1][y] == 'X')
    {
        if (visit[x-1][y] == false)  dfs(height, width, x-1, y, per); 
    }
    else  per++;
    

    if (grid[x][y-1] == 'X')
    {
        if (visit[x][y-1] == false)  dfs(height, width, x, y-1, per); 
    }
    else  per++;

    if (grid[x][y+1] == 'X')
    {
        if (visit[x][y+1] == false)  dfs(height, width, x, y+1, per); 
    }
    else  per++;

    if (grid[x+1][y] == 'X')
    {
        if (visit[x+1][y] == false)dfs(height, width, x+1, y, per); 
    }
    else  per++;

}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator