CF 128A Statues

思維從未深入的思考!

這道題的突破點就是,只要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;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章