POJ 3050 Hopscotch 水~
阿新 • • 發佈:2017-06-01
ble art -a 能夠 得到 con org int target
http://poj.org/problem?id=3050
題目大意:
在一個5*5的格子中走,每一個格子有個數值,每次能夠往上下左右走一格,問走了5次後得到的6個數的序列一共同擁有多少種?(一開始站的位置算一個,能夠走回去)
思路:
近期我就是在做水題。。。
直接DFS就可以。。我用map推斷序列是否反復的。
#include<cstdio> #include<cstring> #include<map> #include<string> #include<iostream> 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<string ,int>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\n",m.size()); return 0; }
POJ 3050 Hopscotch 水~