NOI 1818:红与黑(C++)

news/2024/11/16 8:54:41/

题目地址: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;}
}







http://www.ppmy.cn/news/244199.html

相关文章

ural 1818 Fair Fishermen

题意&#xff1a; 有n个人分鱼&#xff0c;第一个人先来拿&#xff0c;检查一下总数&#xff0c;如果不能恰好分成n份&#xff0c;则扔掉多余的部分&#xff0c;然后拿走自己应得的1/n&#xff0c;第二个人也重复这个步骤&#xff0c;直到第n个人&#xff0c;然后告诉你每次扔掉…

【BZOJ1818】内部白点

链接&#xff1a;BZOJ1818 解法&#xff1a;树状数组 题意转化为求线段的交点个数。 先将任一坐标离散化&#xff0c;这里以 x x 为例。之后将 x" role="presentation" style="position: relative;">xx 与 y y 坐标分别排序,求出这些线段。以…

NOI / 2.5基本算法之搜索-1818:红与黑

总时间限制: 1000ms 内存限制: 65536kB 描述 有一间长方形的房子&#xff0c;地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上&#xff0c;只能向相邻的黑色瓷砖移动。请写一个程序&#xff0c;计算你总共能够到达多少块黑色的瓷砖。 输…

Android adb shell后面可用的常用命令详细列举

adb shell 后面可以跟的常见命令有如下&#xff1a; am app_process backup bootanimation coloradjust dpm idmap input media requestsync settings svc uiautomator appops appwidget bmgr bu content hid ime interrupter pm screencap sm telecom wm dumpsys logcat getpr…

f4v文件解析

经过几天日夜,对照 flv_video_file_format_spec_v10_1.pdf,用C写了个f4v文件分析工具。也适应mp4文件分析。 原始文件为 sky.f4v 由ffmpeg生成(ffmpeg -i sky.mov sky.f4v) 链接: https://pan.baidu.com/s/1asrSPJZq1Zv4zQaYqgDsRg 密码: frec flv.exe (./flv sky.f4v)…

v-if,v-else-if, v-else的实际使用

需求是医疗水平&#xff0c;价格水平&#xff0c;服务态度分值都为0-10分&#xff0c;1-4分是红色&#xff0c;5-7分是黄色&#xff0c;8-10分是绿色&#xff0c;数据均从后台请求过来的。 一开始想的是通过Vue中ref属性&#xff0c;可以获取到当前元素&#xff0c;在数据请求…

我在公司彻夜加班,老板居然做出这种事.....

讲道理&#xff0c;我的学历远达不到BAT等名企大厂的要求&#xff0c;去不了好公司我认了&#xff0c;大专毕业的我在找工作的时候发现留给自己的机会并不多&#xff0c;最后去了一家不知名的小公司。入职后才发现这家公司其实就是个外包公司&#xff0c;里面的业务部门和制度相…

智慧加油站解决方案,提高加油区和卸油区的安全性和效率

英码科技智慧加油站解决方案是一个综合应用了AI智能算法的视觉分析方案&#xff0c;旨在提高加油区和卸油区的安全性和效率。 加油区算法&#xff1a; 吸烟检测&#xff1a;通过AI算法分析视频流&#xff0c;检测是否有人在加油区域吸烟&#xff0c;以防止火灾风险。 打电话…