【剪枝】HDU 1010——tempter of the bone

來源:互聯網
上載者:User

來源:點擊開啟連結

看上去資料規模很小,但是必須要剪枝,否則直接爆TLE。

通過這個題可以練習奇偶剪枝。

另外:還有一個最佳化方式,如果所有步數走完了門還沒關,則直接返回結果"NO".

#include <iostream>#include <cstring>#include <cmath>#include <cstdlib>using namespace std;int n,m,tarstep;int tari,tarj;int si,sj;char map[10][10];int dir[4][2]={0,1,0,-1,1,0,-1,0};int ok=0;void dfs(int si,int sj,int step){    int temp;    if(si>n || sj>m || si<=0 || sj<=0)        return;    if(step==tarstep && si==tari && sj==tarj)        ok=1;    if(ok==1)        return;     //奇偶剪枝    temp=(tarstep-step)-abs(si-tari)-abs(sj-tarj);    if(temp<0 || temp&1)        return;    for(int i=0;i<4;i++)    {        if(map[si+dir[i][0]][sj+dir[i][1]]!='X')        {            map[si+dir[i][0]][sj+dir[i][1]]='X';            dfs(si+dir[i][0],sj+dir[i][1],step+1);            map[si+dir[i][0]][sj+dir[i][1]]='.';        }    }    return ;}int main(){    while(cin>>n>>m>>tarstep)    {        if(n==0 && m==0 && tarstep==0)            break;        int wall=0;        for(int i=1;i<=n;i++)  //下標從1開始        {            for(int j=1;j<=m;j++)            {                cin>>map[i][j];                if(map[i][j]=='S')                {                    si=i;                    sj=j;                }                else if(map[i][j]=='D')                {                    tari=i;                    tarj=j;                }                else if(map[i][j]=='X')                    wall++;            }        }        if(n*m-wall<tarstep) //剪枝,如果能走的空地走完門沒開        {            cout<<"NO"<<endl;            continue;        }        ok=0;        map[si][sj]='X'; //初始化破壞掉        dfs(si,sj,0);        if(ok==0)        {            cout<<"NO"<<endl;        }        else        {            cout<<"YES"<<endl;        }    }    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.