【(C语言,回溯法,超精简)在一个n×m的方格中,m为奇数,放置有n×m个数,方格中间的下方有一人,此人可按照5个方向前进但不能越出方格,求走过的路径最大值。】

#(C语言,回溯法,超精简,)在一个n×m的方格中,m为奇数,放置有n×m个数,方格中间的下方有一人,此人可按照5个方向前进但不能越出方格,求走过的路径最大值。
在这里插入图片描述如图所示。

#include<stdio.h>//靳
int value = 0;//用来存放路径的最大值
int t[6] = { 0 };//用来存放路径
int a[6][7] = {
	{ 16, 4, 3, 12, 6, 0, 3 },
	{ 4, -5, 6, 7, 0, 0, 2 },
	{ 6, 0, -1, -2, 3, 6, 8 },
	{ 5, 3, 4, 0, 0, -2, 7 },
	{ -1, 7, 4, 0, 7, -5, 6 },
	{ 0, -1, 3, 4, 12, 4, 7 } };

void f(int m, int n, int c, int e[]) //m:行,n:列,c:当前路径值的总和 ,e:路径
{
	if (m < 0){//当递归到顶层之外就退出。
		if (c > value) { //退出前判断是否是更大路径。
			value = c;//保存当前最大路径的值
			for (int i = 0; i < 6; ++i)//保存路径
				t[i] = e[i];
		} return;
	}
	for (int i = n - 2; i <= n + 2; ++i)//(n-2--n+2)是从第吗m,行n列展开的5个方向。
	{
		if (i >= 0 && i < 7)//判断保证此方向不越界
		{
			e[m] = a[m][i]; //保存这以方向的点
			f(m - 1, i, c + a[m][i], e);//递归
		}
	}
}
void main()
{
	int e[6] = { 0 };
	f(5, 3, 0, e);
	printf("%d\n",value);//打印最大值
	for (int i = 5; i >= 0; --i)//打印路径
		printf("%d ", t[i]);
}

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值