POJ 3050 Hopscotch

原文鏈接

思路:dfs,以每個格子爲起點,上下左右搜索,6次截至(step=5,從0開始),到達過的數字用vis記錄,避免重複。

AC代碼:

#include <iostream>
#include <cstdio> 
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <cmath>
using namespace std;

int grid[5][5];
int ans=0;
int vis[999999];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};

void dfs(int x,int y,int step,int num)
{
    int i,j;
    if(step==5){
        if(vis[num]==0){
            ans++;
            vis[num]=1;
        }
        return;
    }
    for(i=0;i<4;i++){
        int nx=x+dx[i];
        int ny=y+dy[i];
        if(nx>=0 && nx<5 && ny>=0 && ny<5){
            dfs(nx,ny,step+1,num+grid[nx][ny]*pow(10.0,5-step));
        }
    }
}

int main()
{
    int i,j;
    for(i=0;i<5;i++){
        for(j=0;j<5;j++){
            scanf("%d",&grid[i][j]);
            getchar();
        }
    }
    for(i=0;i<5;i++){
        for(j=0;j<5;j++){
            dfs(i,j,0,grid[i][j]);
        }
    }
    printf("%d",ans);
    return 0;
 } 
發佈了46 篇原創文章 · 獲贊 3 · 訪問量 9265
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章