POJ 3050 Hopscotch 深搜DFS 利用set 解题错误总结及AC代码C/C++

原题

POJ 3050

参考

大佬的代码

set用法

题意

奶牛以一种非传统的方式玩孩子的跳房子游戏,而不是将一组线性的数字框跳入其中,而是创建了一个平行于x和y轴的5x5直线数字网格,然后他们熟练地跳到
网格中的任何数字,然后向前,向后,向右或向左(从对角线)跳到网格中的另一个数字。它们再次(相同规则)跳到一个数字(可能是已经访问过的数字)。总共五个
-grid跃点,它们的跃点创建一个六位数的整数(可能具有前导零,如000201)。确定可以以这种方式创建的不同整数的数量
Input

  • Lines 1…5: The grid, five integers per line
    Output
  • Line 1: The number of distinct integers that can be constructed
    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
    OUTPUT DETAILS:
    111111, 111112, 111121, 111211, 111212, 112111, 112121, 121111, 121112, 121211, 121212, 211111, 211121, 212111, and 212121 can be constructed. No other values are possible.

AC代码

#include<iostream>
#include<cstdio>
#include<set>
#include<iostream>
using namespace std;
set<int> hs;
int maze[6][6];
int m[4][2]={-1,0,1,0,0,-1,0,1};
void dfs(int x,int y,int s,int num)
{
	if(s==5)
	{
		hs.insert(num);
		return;
	}
	for(int i=0;i<4;i++)
	{
		int nx=x+m[i][0];
		int ny=y+m[i][1];
		if(nx>=0&&ny>=0&&nx<=4&&ny<=4)
			dfs(nx,ny,s+1,num*10+maze[nx][ny]);	
	}
}
void solve()
{
	for(int i=0;i<5;i++)
		for(int j=0;j<5;j++)
			dfs(i,j,0,maze[i][j]);
	cout<<hs.size()<<endl;
}
int main()
{
	for(int i=0;i<5;i++)
		for(int j=0;j<5;j++)
			scanf("%d",&maze[i][j]);
	solve();
	return 0;
}

总结

set集合中没有重复的元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_小鹰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值