【DFS】[Usaco2015 Feb]Cow Hopscotch(C++)

Description
正如人们喜欢玩游戏“跳房子”一样,农夫John的奶牛也发明了一些适合它们玩的“跳房子”游戏。尽管这些重达
近一吨的笨拙动物玩游戏总是以灾难结束,但这并不妨碍它们每天下午玩游戏的热情。这个游戏在一个R*C的网格
(2≤R≤15,2≤C≤15)中进行,其中每一个方格是红色或者蓝色。奶牛一开始在左上角的格子中,通过一系列有
效的跳跃,移动到右下角格子中。一个跳跃是有效的,当且仅当
1)你跳跃到与之前所站不同颜色的格子中,
2)你要跳跃到的格子在你现在所站格子的下方至少一行的位置,
3)你要跳跃到的格子在你现在所站格子的右边至少一列的位置。
请帮助奶牛们计算它们有多少种方法可以从左上角格子跳跃到右下角格子。

Input
第一行包含两个整数R和C。后面R行每行包含C个字符。每一个字符是“R”或“B”,表示一个红色或蓝色格子。

Output
输出从左上角格子跳跃到右下角格子的不同方法数量。

Sample Input

4 4
RRRR
RRBR
RBBR
RRRR

Sample Output

3

HINT

Source
Bronze DFS

这题难就难在搜索那一步,我们其实可以用两个for循环来搜索,这样就可以找到下一个可跳的点了。
想想其实也不难
在这里插入图片描述
下面看代码:


#include <bits/stdc++.h>		//头文件 
using namespace std;
int n,m,ans=0;
char a[18][18];		//存地图 
void dfs(int x,int y,char s) {
	if(x>n||y>m||x<=0||y<=0) {
		return ;
	}
	if(x==n&&y==m) {	//到达终点
		ans++;
		return ;		//剪枝,既然已经到了就不需要搜索了
	}
	for(int i=x+1; i<=n; i++) {		//这两个循环是用来搜索下一个点跳在哪的
		for(int j=y+1; j<=m; j++) {
			if(a[i][j]!=s) {	//找到了可跳的点
				dfs(i,j,a[i][j]);
			}
		}
	}
}
int main() {
	cin>>n>>m;
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=m; j++) {
			cin>>a[i][j];
		}
	}
	dfs(1,1,a[1][1]);
	cout<<ans<<endl;

	return 0;
}

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值