穷竭搜索。。无法剪枝。
#include<cstdio> #include<cstring> #include<iostream> #include<set> #include<algorithm> using namespace std; int a[10][10]; char A[15]; int dx[] = {0,1,0,-1}; int dy[] = {1,0,-1,0}; set<string> G; void dfs(int i,int j,int cur) { if(cur==6) { A[6] = '\0'; G.insert(A) ; } else for(int k=0;k<4;k++) { int u = i+dx[k]; int v = j+dy[k]; if(u<0||u>=5||v<0||v>=5) continue; A[cur] = (char)(a[u][v]+'0'); dfs(u,v,cur+1); } } int main() { G.empty(); 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++) { A[0] = (char)(a[i][j] + '0'); dfs(i,j,1); } printf("%d\n",G.size()); return 0; }
原文地址:http://blog.csdn.net/weizhuwyzc000/article/details/45077293