首页 > 代码库 > POJ 3050 Hopscotch 水~
POJ 3050 Hopscotch 水~
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 水~
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。