思维从未深入的思考!
这道题的突破点就是,只要M能存在超过8步,那么就能成功到达!所以DFS9个位置即可!而S一步下落一次,那么走到step,那么S也就下降了step,所以全部状态就可知了!
反省了一下自己的思考,一开始就在想能不能BFS所有的状态,但是很明显这种方法的结果就是果断地爆了内存。也有可能TLE。然后我就想能不能找到规律,最后还是想不到,
我还是没有很好的抓住问题的突破点,然后转化问题。很好的一道题!以后想题目要尽量找出突破口!
#include <iostream>
using namespace std;
int a[9]={-1,-1,-1,0,0,0,1,1,1},b[9] = {-1,0,1,-1,0,1,-1,0,1};
char mp[8][8];
bool dfs(int x,int y,int step)
{
int xx,yy,i;
//cout<<step<<endl;
if(step>8) return 1;
for(i = 0;i < 9;i ++)
{
xx = x + a[i];yy = y + b[i];
if(xx < 0||xx > 7||yy < 0||yy > 7) continue;
if(xx-step>=0&&mp[xx-step][yy]=='S') continue;
if(xx-step-1>=0&&mp[xx-step-1][yy]=='S') continue;
if(dfs(xx,yy,step+1)) return 1;
}
return 0;
}
int main()
{
int i,j;
for(i = 0;i < 8;i ++)
for(j = 0;j < 8;j ++)
cin>>mp[i][j];
if(dfs(7,0,0)) cout<<"WIN"<<endl;
else cout<<"LOSE"<<endl;
}