原题
参考
题意
奶牛以一种非传统的方式玩孩子的跳房子游戏,而不是将一组线性的数字框跳入其中,而是创建了一个平行于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集合中没有重复的元素