当前位置: 代码迷 >> 综合 >> POJ3050 Hopscotch(DFS+SET)
  详细解决方案

POJ3050 Hopscotch(DFS+SET)

热度:53   发布时间:2023-11-08 15:43:50.0

题意:从任意一个格子开始跳,一共跳六步,问能产生多少种排列。
分析:

2019年2月24日

DFS,可以把跳六步生成的数存在set容器里,最后统计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];}}//对每一个点dfsfor(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;
}