POJ3050 Hopscotch(DFS+SET)

题意:从任意一个格子开始跳,一共跳六步,问能产生多少种排列。
分析:
dfs,可以把跳六步生成的数存在set容器里,最后统计set容器中有多少个元素就是答案。

#include<iostream>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std;
typedef long long ll;
ll mp[10][10];
set<ll> s;
ll dir[4][2]={-1,0,1,0,0,1,0,-1};
void dfs(ll x,ll y, ll step,ll num){
    if(step==6){
        s.insert(num);
        return ;
    }
    for(int i=0;i<4;i++){
        ll nx=x+dir[i][0];
        ll ny=y+dir[i][1];
        if(nx>=0&&ny>=0&&nx<5&&ny<5){
        //  step++;
            dfs(nx,ny,step+1,num*10+mp[nx][ny]);
        //  step--;
        }
    }
}
int main(){
    for(int i=0;i<5;i++){
        for(int j=0;j<5;j++){
            cin>>mp[i][j];
        }
    }
    //对每一个点dfs
    for(int i=0;i<5;i++){
        for(int j=0;j<5;j++){
            dfs(i,j,1,mp[i][j]);
        }
    } 

    cout<<s.size()<<endl;
    return 0;
} 

猜你喜欢

转载自blog.csdn.net/qq_37360631/article/details/81749691