思維從未深入的思考!
這道題的突破點就是,只要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;
}