首页 > 编程 > C++ > 正文

第四届蓝桥杯C++A组——振兴中华(dfs)

2019-11-06 07:30:54
字体:
来源:转载
供稿:网友
小明参加了学校的趣味运动会,其中的一个项目是:跳格子。地上画着一些格子,每个格子里写一个字,如下所示:(也可参见p1.jpg)

从我做起振 我做起振兴 做起振兴中 起振兴中华

比赛时,先站在左上角的写着“从”字的格子里,可以横向或纵向跳到相邻的格子里,但不能跳到对角的格子或其它位置。一直要跳到“华”字结束。要求跳过的路线刚好构成“从我做起振兴中华”这句话。请你帮助小明算一算他一共有多少种可能的跳跃路线呢?

答案是一个整数,请通过浏览器直接提交该数字。 注意:不要提交解答过程,或其它辅助说明类的内容。

明显的深搜

#include <iostream>#include <cstring>#include <string>#include <vector>#include <queue>#include <cstdio>#include <set>#include <cmath>#include <algorithm>#include <queue>#define INF 0x3f3f3f3f#define MAXN 100005#define Mod 10001using namespace std;int a[4][5]={{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7},{4,5,6,7,8}};int vis[10][10],ans;int dx[]={1,0,-1,0};int dy[]={0,1,0,-1};void dfs(int x,int y){ if(a[x][y]==8) { ans++; return; } for(int i=0;i<4;++i) { int xm=x+dx[i]; int ym=y+dy[i]; if(!vis[xm][ym]&&a[xm][ym]==a[x][y]+1) { vis[xm][ym]=1; dfs(xm,ym); vis[xm][ym]=0; } }}int main(){ memset(vis,0,sizeof(vis)); ans=0; dfs(0,0); cout<<ans; return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选