馬走日,簡單搜索

要作一個有心人——王曉燕ios

因爲肺炎疫情的爆發,假期去學校機房上課的計劃泡湯了測試

但是王主任早就給咱們列好了計劃 傳統藝能spa

而後他就給咱們整了一大堆題,其中就包含很是簡單的搜索題code

因而就有了這道簡單的題目:ci

【題目描述】
馬在中國象棋以日字形規則移動。

請編寫一段程序,給定n×m大小的棋盤,以及馬的初始位置(x,y),要求不能重複通過棋盤上的同一個點,計算馬能夠有多少途徑遍歷棋盤上的全部點。

【輸入】
第一行爲整數T(T < 10),表示測試數據組數。

每一組測試數據包含一行,爲四個整數,分別爲棋盤的大小以及初始位置座標n,m,x,y。(0≤x≤n-1,0≤y≤m-1, m < 10, n < 10)。

【輸出】
每組測試數據包含一行,爲一個整數,表示馬能遍歷棋盤的途徑總數,0爲沒法遍歷一次。

【輸入樣例】
1
5 4 0 0
【輸出樣例】
32

這道題思路比較簡單string

從起點開始按日字格走,當步數等於n*m的時候,就表明着遍歷了一次,那麼答案加一it

因而就有了下面的代碼:io

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int dx[]={0,1,1,2,2,-1,-1,-2,-2};
const int dy[]={0,2,-2,1,-1,2,-2,1,-1};
int t,ans=0,n,m,sx,sy;
bool vis[101][101];
void dfs(int x,int y,int cnt){
    if(cnt==n*m)ans++;
    else{
    for(int i=1;i<=8;++i){
        int tx=x+dx[i];
        int ty=y+dy[i];
        if(x>=0&&x<n&&y>=0&&y<m&&vis[tx][ty]==false){
            vis[tx][ty]=1;
            dfs(tx,ty,cnt+1);
            vis[tx][ty]=0;
        }
    }
    }
}
int main()
{
    cin>>t;
    for(int i=1;i<=t;++i){
        cin>>n>>m>>sx>>sy;
        dfs(sx,sy,1);
        cout<<ans<<endl;
        ans=0;
    }
    system("pause");
    return 0;
}

OK!編譯運行,把樣例複製上去,按下Enter,而後RE編譯

!?RE,哪裏出了問題?class

經過仔細觀察咱們發現(jzh大佬說不能用肉眼看),在判斷是否出界時候應該要用移動後的座標tx,ty

打標也不太對,應當在當前座標點處打標

這纔有了真正的AC代碼:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int dx[]={0,1,1,2,2,-1,-1,-2,-2};
const int dy[]={0,2,-2,1,-1,2,-2,1,-1};
int t,ans=0,n,m,sx,sy;
bool vis[101][101];
void dfs(int x,int y,int cnt){
    if(cnt==n*m)ans++;
    else{
    for(int i=1;i<=8;++i){
        int tx=x+dx[i];
        int ty=y+dy[i];
        if(tx>=0&&tx<n&&ty>=0&&ty<m&&vis[tx][ty]==false){
            vis[x][y]=1;
            dfs(tx,ty,cnt+1);
            vis[x][y]=0;
        }
    }
    }
}
int main()
{
    cin>>t;
    for(int i=1;i<=t;++i){
        cin>>n>>m>>sx>>sy;
        dfs(sx,sy,1);
        cout<<ans<<endl;
        ans=0;
    }
    system("pause");
    return 0;
}

這個故事告訴咱們,要作一個有心人。否則就會和別人產生差距,是一定AK不了IOI的....

相關文章
相關標籤/搜索