zoukankan      html  css  js  c++  java
  • 题解 CF128A 【Statues】

    题解 CF128A 【Statues】

    CF128A

    题目大意

    从左下角走到右上角,走的过程中有障碍物。但每走一步时障碍物就会下落一层,问是否能到右上角。

    题目分析

    这道题主要运用深度优先搜索。由于每走一步障碍物都会下落,所以只需走8次,障碍物都会掉出地图。所以,问题就被转化成了:判断走8次会不会死亡即可。

    存图过程中,我们可以将 'S' 标记为 1,之后进行 dfs 即可。细节见代码。

    代码

    #include<iostream>
    #include<cstdio>
    using namespace std;
    
    int f[9][9],sx,sy;
    int dx[9]= {1,1,1,-1,-1,-1,0,0,0}; //九个方向
    int dy[9]= {1,-1,0,1,0,-1,1,-1,0};
    
    int dfs(int sx,int sy,int s)
    {
    	if(s==0) return 1; //s=0时,即已经移动了8步,返回,输出WIN
    	for(int i=0; i<9; ++i)
    	{
    		int nx=dx[i]+sx;
    		int ny=dy[i]+sy;
    		if(nx>8 || ny>8 || nx<1 || ny<1) continue; //判断边界
    		if(f[nx-8+s-1][ny] || f[nx-8+s][ny]) continue; //判断障碍物下落后 和 障碍物下落前 能不能生存
    		if(dfs(nx,ny,s-1)) return 1; //如果最终存活,返回1
    	}
    	return 0;//否则返回0
    }
    int main()
    {
    	char ch;
    	for(int i=1; i<=8; ++i)
    		for(int j=1; j<=8; ++j)
    		{
    			cin>>ch;//输入字符
    			if(ch=='S') f[i][j]=1;//将字符转变成图
    			else f[i][j]=0;
    			if(ch=='M') sx=i,sy=j; //判断起点的位置
    		}
    	if(dfs(sx,sy,8)) puts("WIN");
    	else puts("LOSE");
    	return 0;
    }
    
    
  • 相关阅读:
    同步与异步 & 阻塞与非阻塞
    Memcached和Redis比较
    PHP安全之Web攻击
    搭建LNAMP环境(七)- PHP7源码安装Memcached和Memcache拓展
    PHP安装mysql.so扩展
    MySQL基础笔记
    CGI概念
    Nginx与Apache比较
    Nginx重写
    负载均衡session会话保持方法
  • 原文地址:https://www.cnblogs.com/EdisonBa/p/13866911.html
Copyright © 2011-2022 走看看