• HDOJ1312 Red and Black


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312

     1 //DFS
     2 #include<iostream>
     3 int count,m,n;
     4 int dir[4][2]={-1,0,1,0,0,-1,0,1};
     5 char map[21][21];
     6 void DFS(int i,int j)
     7 {
     8     if(i<=0||i>m||j<=0||j>n)
     9         return;
    10     for(int k=0;k<4;++k)
    11         if(i+dir[k][0]>0&&i+dir[k][0]<=m&&j+dir[k][1]>0&&j+dir[k][1]<=n)
    12             if(map[i+dir[k][0]][j+dir[k][1]]=='.')
    13             {
    14                 ++count;
    15                 map[i+dir[k][0]][j+dir[k][1]]='#';
    16                 DFS(i+dir[k][0],j+dir[k][1]);
    17             }
    18 }
    19 int main()
    20 {
    21     using namespace std;
    22     int i,j,stx,sty;
    23     while(cin>>n>>m&&(n||m))
    24     {
    25         count=1;
    26         for(i=1;i<=m;++i)
    27             for(j=1;j<=n;++j)
    28             {
    29                 cin>>map[i][j];
    30                 if(map[i][j]=='@')
    31                 {
    32                     stx=i;
    33                     sty=j;
    34                     map[i][j]='#';
    35                 }
    36             }
    37         DFS(stx,sty);
    38         cout<<count<<endl;
    39     }
    40     return 0;
    41 }
     1 #include <iostream> 
     2 using namespace std;
     3 //宏定义增强代码适应能力和可读性
     4 #define MAX 22 
     5 char rect[MAX][MAX]; 
     6 
     7 int walkFrom(int currentRow, int currentCol); //返回从某点走过的格子数,减少全局量的使用
     8 void main()
     9 {
    10     int col, row;
    11     while(cin >> col >> row, col!=0 && row != 0)
    12     { 
    13         int i, j, startRow, startCol;
    14         for(i = 0; i < MAX; i++)//intialize--方块四周加白色块,去掉边界判断,
    15             for(j=0; j<MAX; j++)
    16                 rect[i][j]='#'; 
    17         for(i=1;i<=row;i++)
    18             for(j=1;j<=col;j++)
    19             {
    20                 cin >> rect[i][j];
    21                 if(rect[i][j] == '@')
    22                 {
    23                     startRow = i;
    24                     startCol = j; 
    25                     rect[i][j]='.';
    26                 }
    27             }
    28         cout << walkFrom(startRow,startCol) << endl;
    29     }
    30 } 
    31 int walkFrom(int currentRow, int currentCol)
    32 { 
    33       if(rect[currentRow][currentCol] == '#')
    34               return 0; 
    35       else
    36           rect[currentRow][currentCol] = '#'; 
    37       return  
    38          1+walkFrom(currentRow+1,currentCol)+walkFrom(currentRow-1,currentCol)
    39          +walkFrom(currentRow,currentCol+1)+walkFrom(currentRow,currentCol-1); 
    40 } 
    功不成,身已退
  • 相关阅读:
    Linux下防火墙的相关命令
    java中的异常总结
    Java中的==和equals的区别
    一个简单的前后端分离项目,适合新手练手
    入住博客园鸭
    centos7 安装 Python PIL模块
    Linux 装机错误解决
    Python 爬取煎蛋网妹子图片代码
    Python 简易聊天机器人
    Python员工信息表练习
  • 原文地址:https://www.cnblogs.com/dongsheng/p/2558038.html
Copyright © 2020-2023  润新知