题意:从任意一个格子开始跳,一共跳六步,问能产生多少种排列。
分析:
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;
}