首页 > 代码库 > poj3050
poj3050
#include <stdio.h> #include <set> #include <string> using namespace std; int a[6]; int b[6]; int c[1000]; int h=0; int grid[5][5]; //输入的网格 int go[4][2] = { 0, 1, 0, -1, 1, 0, -1, 0 }; //四个方向 int safe(int y,int x) { int r=1; if (x< 0 || x >= 5 || y < 0 || y >= 5) { r=0; } return r; } //深度搜索 void dfs(int row, int col, int step) { if (step == 6) //满6个,存到set里 { int num=0; int flag=1; for(int i=0;i<6;i++) b[i]=a[i]; num=b[0]+b[1]*10+b[2]*100+b[3]*1000+b[4]*10000+b[5]*100000; for(int i=0;i<h;i++) { if(num==c[i]) flag=0; } if(flag==0) return ; if(flag==1) { c[h++]=num; } return ; } for (int i = 0; i < 4; i++) //4个方向深度搜索 { //越界判断 if (safe(row,col)) { a[step]=grid[row][col]; int tr = row + go[i][0]; int tc = col + go[i][1]; dfs(tr, tc, step + 1); } } } int main() { //输入 for (int i = 0; i < 5; i++) for (int j = 0; j < 5; j++) scanf("%d", &grid[i][j]); //处理 for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { dfs(i, j, 0); } } printf("%d\n",h); return 0; }
poj3050
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。