首页 > 其他分享 >聚光灯

聚光灯

时间:2024-04-13 16:11:45浏览次数:9  
标签:ch int 地图 扩展 break ++ 聚光灯

#include <iostream> 
using namespace std; 
  
const int N = 109; // 定义一个常量N,作为数组的最大尺寸限制  
char ch[N][N]; // 定义一个二维字符数组,用于存储地图上的字符  
bool f[N][N]; // 定义一个二维布尔数组,用于记录哪些位置被访问过  
int n, m; // 定义整数n和m,分别代表地图的行数和列数  
  
// 定义一个函数cal,用于从给定的(x, y)坐标开始,在四个方向上扩展,并标记可达的位置  
void cal(int x, int y) {  
    // 向上方向扩展  
    for (int i = 0; i < n; i++) {  
        if (x - i < 0) { // 如果超出了地图的上边界,则停止扩展  
            break;  
        }  
        f[x - i][y] = 1; // 标记当前位置为已访问  
  
        if (ch[x - i][y] == '*') { // 如果遇到障碍物'*',则停止扩展  
            break;  
        }  
    }  
  
    // 向下方向扩展  
    for (int i = 0; i < n; i++) {  
        if (x + i >= n) { // 如果超出了地图的下边界,则停止扩展  
            break;  
        }  
        f[x + i][y] = 1; // 标记当前位置为已访问  
  
        if (ch[x + i][y] == '*') { // 如果遇到障碍物'*',则停止扩展  
            break;  
        }  
    }  
  
    // 向左方向扩展  
    for (int i = 0; i < m; i++) {  
        if (y - i < 0) { // 如果超出了地图的左边界,则停止扩展  
            break;  
        }  
        f[x][y - i] = 1; // 标记当前位置为已访问  
  
        if (ch[x][y - i] == '*') { // 如果遇到障碍物'*',则停止扩展  
            break;  
        }  
    }  
  
    // 向右方向扩展  
    for (int i = 0; i < m; i++) {  
        if (y + i >= m) { // 如果超出了地图的右边界,则停止扩展  
            break;  
        }  
        f[x][y + i] = 1; // 标记当前位置为已访问  
  
        if (ch[x][y + i] == '*') { // 如果遇到障碍物'*',则停止扩展  
            break;  
        }  
    }  
}  
  
int main() {  
    cin >> n >> m; // 输入地图的行数和列数  
    for (int i = 0; i < n; i++) {  
        cin >> ch[i]; // 输入地图的每一行字符  
    }  
  

  
    // 遍历地图的每个位置,查找起始点'@'  
    for (int i = 0; i < n; i++) {  
        for (int j = 0; j < m; j++) {  
            if (ch[i][j] == '@') {  
                cal(i, j); // 如果找到起始点'@',则从该点开始扩展  
            }  
        }  
    }  
  
    int ans = 0; // 初始化计数器为0,用于统计被访问过的位置数量  
    // 遍历f数组,统计被访问过的位置数量  
    for (int i = 0; i < n; i++) {  
        for (int j = 0; j < m; j++) {  
            if (f[i][j]) {  
                ans++; // 如果某个位置被访问过,则计数器加1  
            }  
        }  
    }  
  
    cout << ans << endl; // 输出被访问过的位置数量  
    return 0; // 程序正常退出  
}

 

标签:ch,int,地图,扩展,break,++,聚光灯
From: https://www.cnblogs.com/iswuyi/p/18132997

相关文章

  • EXCEL C# 聚光灯
    C#EXCEL版本聚光灯,开发框架利用EXCELDNA开源库publicstaticclassExtension{staticApplication_xlapp=(Application)ExcelDnaUtil.Application;publicconststringMyConditionRng="$1:$1048576";[ExcelCommand(MenuName="拓展",Menu......
  • 开源治理·聚光灯| 面对“百家争鸣”的许可证,企业如何做出明智选择?
    本文我们将一同探寻那些常见的开源许可证类型,它们各具特色,有的宽容大度,有的则严格苛刻。同时,我们还将讨论企业在面对许可证问题时,应该如何审时度势,做出明智的选择。毕竟,在这个开源的世界里,只有尊重规则,才能走得更远。在开源许可证中“择婿”“好好先生” MIT/X11许可证MIT/X11许......
  • 聚光灯
    <!DOCTYPEhtml><html><head><metacharset="utf-8"><title></title><linkrel="stylesheet"href="new_file.css"/></head>......
  • 校友聚光灯:Ben — 从音乐和音频总监到 CEO 和联合创始人
    校友聚光灯:Ben—从音乐和音频总监到CEO和联合创始人“我最终加入了CodeFellows,这太棒了。六个月的时间里,被其他真正热衷于它的人包围着,我不仅了解了软件世界,它是如......