java 跳格子_【题解】跳房子-C++

Description

奶牛按不太传统的方式玩起小朋友玩的跳房子游戏,现给出一个5*%的由数字组成的网格。它们在格子中向前前跳,向后跳,向左跳,向右跳,跳到网格中另一个数字后,又这样继续跳(可能跳到某个已跳过的数字)。一共在网格中跳过五次后,它们经过的格子数组成一个六位数(可能是0开始头的,例如000201).现问所有可以被跳出来的不同整数的总数。

Input

输入共五行,每行五个数字.

Output

如题

Sample Input

1 1 1 1 1

1 1 1 1 1

1 1 1 1 1

1 1 1 2 1

1 1 1 1 1

Sample Output

15

HINT

111111, 111112, 111121, 111211, 111212, 112111, 112121, 121111, 121112,

121211, 121212, 211111, 211121, 212111, and 212121 can be constructed.

No other values are possible.

今天考试2题…

又是一道DFS,分别从每个点出发,往四周拓展,不打标记,深度超限就判断当前情况是否出现过,没出现过就标记然后cnt++,查找工作可以交给set来完成,这样就不需要打标记这些了…

ov.

1 /*

2 这道题看题目描述感觉ans用int存,前导0存不下,所以干脆就用字符串一位一位加3 */

4 #include

5 using namespacestd;6 intcnt;7 stringans;8 char mp[11][11];9 int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};10 bool in(int x,inty)11 {12 return 1<=x&&x<=5&&1<=y&&y<=5;13 }14 sets;15 void dfs(int x,int y,int dep,stringan)16 {17 an+=mp[x][y];18 if(dep==6)19 {20 if(!s.count(an))21 {22 s.insert(an);23 cnt++;24 }25 return;26 }27 for(int i=0;i<4;i++)28 {29 int nx=x+dir[i][0],ny=y+dir[i][1];30 if(in(nx,ny))31 {32 dfs(nx,ny,dep+1,an);33 }34 }35 return;36 }37 intmain()38 {39 for(int i=1;i<=5;i++)40 for(int j=1;j<=5;j++)41 cin>>mp[i][j];42 for(int i=1;i<=5;i++)43 {44 for(int j=1;j<=5;j++)45 {46 dfs(i,j,1,"");47 }48 }49 cout<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值