题意: 5*5的矩阵里,某个点能够上下左右走,走5步,然后路径会形成一个串,问你,这个5*5里面能够形成多少个不同个串。 思路: 直接暴搜,然后对于一个串塞到set里去,然后输出set里的个数就好了
#include<cstdio> #include<map> #include<set> #include<string> #include<queue> #include<math.h> #include<string.h> #include<algorithm> using namespace std; #define eps 1e-8 typedef __int64 LL; int dx[4]={0,0,1,-1}; int dy[4]={1,-1,0,0}; string temp; set<string>ans; int a[6][6]; void dfs(int x,int y,int num) { if(num==6) { ans.insert(temp); return; } for(int i=0;i<4;i++) { int xx=dx[i]+x; int yy=dy[i]+y; if(xx<0||yy<0||xx>=5||yy>=5) continue; temp.push_back(a[xx][yy]+'0'); dfs(xx,yy,num+1); temp.resize(temp.size()-1); } } int main() { for(int i=0;i<5;i++) for(int j=0;j<5;j++) scanf("%d",&a[i][j]); for(int i=0;i<5;i++) for(int j=0;j<5;j++) { temp=a[i][j]+'0'; dfs(i,j,1); } printf("%d\n",ans.size()); return 0; }