hdu 1364 Illusive Chase

剛開始我還很懷疑我的想法,後來百度沒發現題解,看到discuss裏面說數據很弱,於是我就大膽的寫了個暴力,每次枚舉一個點找到一次到合法終點的合法
路徑是,結束dfs,簡單暴力代碼如下
#include <iostream>
#include<cstdio>
#include<cstring>

using namespace std;
const int mx=111;
int mp[mx][mx],T,n,m,num,ans;
bool used[mx][mx];
int dx[]={0,0,1,-1},dy[]={-1,1,0,0};
struct MOVE
{
    int least,most,dir;
}mov[1000];
bool dfs(int x,int y,int co,int step)
{
    if(step==num)
    {
        return true;
    }
    if(co>=mov[step].least&&co<=mov[step].most)
    {
        if(dfs(x,y,0,step+1))
            return true;
    }
    if(co<mov[step].most)
    {
        int nx=x+dx[mov[step].dir],ny=y+dy[mov[step].dir];
        if(nx>=0&&nx<n&&ny>=0&&ny<m&&mp[nx][ny]==0)
        if(dfs(nx,ny,co+1,step))
            return true;
    }
    return false;
}
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&m);
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
            scanf("%d",&mp[i][j]);
        num=0;
        while(scanf("%d%d",&mov[num].least,&mov[num].most),mov[num].least||mov[num].most)
        {
            char c;
            cin>>c;
            if(c=='R')mov[num++].dir=1;
            else if(c=='L') mov[num++].dir=0;
            else if(c=='U') mov[num++].dir=3;
            else mov[num++].dir=2;
        }
        ans=0;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(mp[i][j]==0)
                {

                if(dfs(i,j,0,0))ans++;
                }

            }
        }
        printf("%d\n",ans);
    }
    return 0;
}

發佈了80 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章