给出一个5*5的数组,问能组成多少个不重复的六位组合
参考别人的博客得出的思路,利用stl中set的去重性
#include <cstdio>
#include <algorithm>
#include <set>
#include <string>
using namespace std;
int mp[10][10];
int tx[4]={0,1,0,-1};
int ty[4]={1,0,-1,0};
string ss;
set<string> s;
void dfs(int x,int y,int c) {
if (c==5) {
s.insert(ss);
return;
}
for (int i=0;i<4;i++) {
int xx=x+tx[i];
int yy=y+ty[i];
if (xx<0 || yy<0 || xx>=5 || yy>=5) continue;
ss.push_back(mp[xx][yy]+'0');
dfs(xx,yy,c+1);
ss.resize(ss.size()-1); //pop_back通不过c++的编译
}
return;
}
int main()
{
for (int i=0;i<5;i++) {
for (int j=0;j<5;j++)
scanf ("%d",&mp[i][j]);
}
for (int i=0;i<5;i++) {
for (int j=0;j<5;j++) {
ss=mp[i][j]+'0';
dfs(i,j,0);
}
}
printf ("%d\n",s.size());
return 0;
}