题目地址:http://noi.openjudge.cn/ch0205/1818/
题目:求地图中能到达的黑砖总数
一开始没有思路,参考了:http://blog.csdn.net/c20190102/article/details/52329390
思路:简单搜索
使用二维数组保存地图,找到起始位置,从起始位置开始上下左右搜索,直到不满足条件(撞墙或者超出地图),满足条件的位置计数加1,计数值即为所求。
#include "iostream"
#include "vector"
using namespace std;
int blackCount = 0;
void searchMap(vector<vector<char>>&map,int posX,int posY,int w,int h,int &blackCount)
{if(posX<0 || posY<0 || posX>=h || posY>=w || map[posX][posY]=='#')return;//能到这是,说明该位置是符合位置的黑砖,计数加1blackCount++;//将该位置为不可达map[posX][posY] = '#';//向上searchMap(map,posX,posY-1,w,h,blackCount);//向下searchMap(map,posX,posY+1,w,h,blackCount);//向左searchMap(map,posX-1,posY,w,h,blackCount);//向右searchMap(map,posX+1,posY,w,h,blackCount);}
int main()
{while(1) {int w, h;cin >> w >> h;if(w==0&&h==0)return 0;vector<vector<char>> vc(22, vector<char>(22)); //定义二维数组用来存储地图for (int i = 0; i < h; i++) {for (int j = 0; j < w; j++) {char inC;cin >> inC;vc[i][j] = inC;//vc[i][j]需要声明二维数组长度,否则要用push_back}}//找到起始位置int x = 0, y = 0; //x行 y列 从0开始for (int i = 0; i < h; i++) {for (int j = 0; j < w; j++) {if(vc[i][j] == '@'){x = i;y = j;break;}}}//寻找,上下左右搜索直至撞墙或超出地图searchMap(vc, x, y, w, h, blackCount);cout << blackCount << endl;//不要忘记在下一次循环前清空二维数组vc.clear();//不要忘记在下一次循环前将blackCount归零blackCount = 0;}
}