赞
踩
思路:
1、遍历网格中的所有点,以遍历到的点为起点进行深度优先搜索,深度优先搜索递归6次后返回
2、用set来存储所得到的数,以达到去重的目的
#include <cstdio> #include <cstring> #include <stack> #include <queue> #include <algorithm> #include<iostream> #include<map> #include<set> using namespace std; #define MAX_A 10000 int grid[5][5]; //方向数组,用于遍历四个方向 int xd[4] = {0,1,0,-1}; int yd[4] = {1,0,-1,0}; set<int> numset; //深度优先搜索,每个起点都重复一次,到达6次时返回 //用set记录组合 //参数分别为数、数的位数、牛当前的坐标 void dfs(int number,int digit,int x,int y){ number = number*10+grid[x][y]; digit++; if(digit==6){ numset.insert(number); return; }else{ //遍历四个方向,递归 for(int i=0;i<4;i++){ int xi = x+xd[i]; int yi = y+yd[i]; if(xi>=0&&xi<5&&yi>=0&&yi<5){ dfs(number,digit,xi,yi); } } } } void solve(){ for(int i=0;i<5;i++){ for(int j=0;j<5;j++){ dfs(0,0,i,j); } } } int main(){ //输入 for(int i=0;i<5;i++){ for(int j=0;j<5;j++){ scanf("%d",&grid[i][j]); } getchar(); } solve(); printf("%d\n",numset.size()); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。