poj3050
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章