2019年蓝桥杯国赛C++B组 试题E 路经计数

论坛 期权论坛 脚本     
已经匿名di用户   2022-5-29 19:30   1693   0
#include<iostream>
#include<cmath>
#include<cstring>
#include<string.h>
#include<cstdlib>
#include<algorithm>
#include<sstream> 
#include<vector> 
#include<map>
#include<set>
#include<queue>
#include<stack>
using namespace std;
int a[6][6];  
int visit[6][6]; 
int ans;   
void dfs(int i,int j,int num);
int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int main()
{
 visit[0][0]=1;  //这个已访问标志不设置还真不行,因为你可能走0,0多次   
 dfs(0,0,12);
 cout<<ans<<endl;  //206
 return 0; 
 } 
 
void dfs(int i,int j,int num)
{ 
 if(num<0||i+j>=7)  //剪枝
 {
  return;
 }
 for(int k=0;k<4;k++)
 {
  int tempx=i+dir[k][0];
  int tempy=j+dir[k][1];
  if(tempx==0&&tempy==0&&num>=1&&num!=11)  //num>=1表示我是走了11步再往前走一步就到达(0,0) 因为步数是限制在最多12步 
  {                              //num!=11  这个地方是为了防止你只走了一步比如(0,0)到(0,1)然后就直接到(0,0) 
   ans++;                     //这个地方是为了防止你只走了一步比如(0,0)到(1,0)然后就直接到(0,0)
  }
  if(tempx<0||tempy<0||tempx>5||tempy>5||visit[tempx][tempy])
  {
   continue;
  }
  else
  {
   visit[tempx][tempy]=1;
   dfs(tempx,tempy,num-1);   //注意回溯 
   visit[tempx][tempy]=0;
  }
 }
   return ;  //这个return 要不要都行 
}

以上为参考代码:我看到往上有答案是202和208 。

我看到一个B站视频是206感觉还是对的。

B站可视化路经计数

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP