POJ 3050 Hopscotch 水~

2014-11-24 12:04:04 · 作者: · 浏览: 0

题目大意:

在一个5*5的格子中走,每个格子有个数值,每次可以往上下左右走一格,问走了5次后得到的6个数的序列一共有多少种?(一开始站的位置算一个,可以走回去)

思路:

最近我就是在做水题。。。

直接DFS即可。。我用map判断序列是否重复的。

#include
  
   
#include
   
     #include
     #include
     
       #include
      
        using namespace std; int pos[10][10]; const int dx[]={1,-1,0,0}; const int dy[]={0,0,1,-1}; string ans; int a[10]; map
       
        m; void dfs(int x,int y,int cur) { if(cur==6) { ans.clear(); for(int i=0;i<6;i++) ans=ans+(char)a[i]; m[ans]++; return; } for(int i=0;i<4;i++) { int nx=x+dx[i]; int ny=y+dy[i]; if(nx<0||ny<0||nx>4||ny>4) continue; a[cur]=pos[nx][ny]; dfs(nx,ny,cur+1); } } int main() { for(int i=0;i<5;i++) for(int j=0;j<5;j++) scanf(%d,&pos[i][j]); for(int i=0;i<5;i++) for(int j=0;j<5;j++) { a[0]=pos[i][j]; dfs(i,j,1); } printf(%d ,m.size()); return 0; }