• 【蓝桥杯每日一题】4.4 扫雷


    题目来源:

    687. 扫雷 - AcWing题库
    参考:y总视频讲解

    问题描述:

    • 找到解决扫雷游戏中的最小点击次数

    思考:

    为了保证胜利且每个格子只能走一次,所以当遇到地雷或检测到该格子周围存在地雷的时候就需要停止搜索,那么如何知道当前的格子的周围是否存在地雷呢?

    可以用一个二维数组 n u m num num来统计每个位置周围的地雷数量,例如,当前位置为 ( 2 , 2 ) (2,2) (2,2)则就需要查看 ( 1 , 1 ) (1,1) (1,1) ( 1 , 2 ) (1,2) (1,2) ( 1 , 3 ) (1,3) (1,3) ( 2 , 1 ) (2,1) (2,1) ( 2 , 3 ) (2,3) (2,3) ( 3 , 1 ) (3,1) (3,1) ( 3 , 2 ) (3,2) (3,2) ( 3 , 3 ) (3,3) (3,3)的位置是否存在地雷,如果存在就把 ( 2 , 2 ) (2,2) (2,2)位置的地雷数量 + 1 +1 +1。由于题目中求最小点击次数,在我们每次点击 0 0 0位置时,其周围的所有 0 0 0都会被点亮,所以我们可以把每个为 0 0 0的位置进行搜索并进行标记表示已经扫描过了一次,并且将点击次数 + 1 +1 +1。最后再进行一次遍历,将所有状态不为 0 0 0的格子进行点击即可求出最小点击次数。

    步骤:

    • 使用num数组来表示当前位置周围的地雷数量,如果当前位置就是地雷,那么设置为-1。
    • 遍历num数组,如果当前位置为0,即周围没有地雷,则进行搜索,将其周围所有为0的点进行标记,直到num不为0时停止。
      最后统计没有被标记为-1的结点数量,累加,即为最后结果

    AC Code:

    #include
    using namespace std;
    
    const int N=310;
    int dx[8]={1,1,1,0,0,-1,-1,-1};
    int dy[8]={1,0,-1,1,-1,1,0,-1};
    char m[N][N];  //整个的地图
    int num[N][N];  //显示的数字
    bool vis[N][N]; //遍历的记录
    
    int t,n;
    int res=0;
    
    void dfs(int x,int y)  //遍历0周围所有的点,标记并且将该点设置为不可点击
    {
    	vis[x][y]=1;
    	num[x][y]=-1;
    	
    	for(int i=0;i<8;i++)
    	{
    		int nx=x+dx[i],ny=y+dy[i];
    		if(nx>=0&&ny>=0&&nx0) //标记已经遍历
    				{
    					vis[nx][ny]=1;
    					num[nx][ny]=-1;
    				}
    				if(num[nx][ny]==0) dfs(nx,ny);
    			}
    		}
    	}
    }
    
    int main()
    {
    	scanf("%d",&t);
    	for(int i=1;i<=t;i++)
    	{
    		
    		scanf("%d",&n);
    		for(int j=0;j>m[j];
    		
    		memset(num,0,sizeof(num)); //每次循环记得清空数组
    		
    		for(int j=0;j=0 && x=0 && y
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94

    明日预告:网络分析
    准备趁着清明节假期啃块硬骨头。

  • 相关阅读:
    Linux内核:I2C设备驱动
    学的Java要去 IT 外包公司?
    使用CFimagehost源码搭建免费的PHP图片托管私人图床,无需数据库支持
    Redis ----Spring MVC 有时候找不到类的原因
    SPSS探索性分析
    【SQL刷题】Day2----SQL语法基础查询
    DSP篇--C6678功能调试系列之TIMER、UART调试
    Python爬虫何如抓包?这三个案例手把手教会你,非常详细...
    关于视频超分辨率的学习-day1
    循环肿瘤细胞(CTCs)分选进样系统微小正负压精密控制的解决方案
  • 原文地址:https://blog.csdn.net/qq_63446418/article/details/137378723