走方格

走方格

链接:https://ac.nowcoder.com/acm/contest/368/A
来源:牛客网
 

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

在一个n*n的方格中,你只能斜着走。

你还有一次上下左右走的机会

给你一个起点(sx,sy),和终点(ex,ey),询问从起点到终点最少走多少步。

输入描述:

 

一行5个整数,n,sx,sy,ex,ey。

1≤sx,sy,ex,ey≤n≤1e18

输出描述:

一行一个整数,表示从起点到终点最少走多少步。

示例1

输入

 

8 2 3 7 5

输出

 

5

取x与y的最大步数即可

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
	long long int n, sx, sy, ex, ey;
	scanf("%lld %lld %lld %lld %lld", &n, &sx, &sy, &ex, &ey);
	long long int ans = max(abs(sx-ex), abs(sy-ey));
	printf("%lld\n", ans);
}

 

### C语言实现方格问题的算法代码 以下是一个完整的C语言程序,用于解决方格问题。此问题的核心是通过深度优先搜索(DFS)遍历所有可能路径,并统计从起点终点的有效路径数量。 ```c #include <stdio.h> // 定义全局变量 int n, m; // 方格的行数和列数 int count = 0; // 记录有效路径的数量 int a[31][31]; // 0表示未访问,1表示已访问,2表示障碍物 // 移动方向数组:右、下 int xx[2] = {1, 0}; int yy[2] = {0, 1}; // 初始化函数:将偶数行和列设置为障碍物 void init() { int i, j; a[1][1] = 1; // 起点标记为已访问 for (i = 1; i <= 30; i++) { for (j = 1; j <= 30; j++) { if (i % 2 == 0 && j % 2 == 0) { a[i][j] = 2; // 设置障碍物 } } } } // 深度优先搜索函数 void dfs(int x, int y) { int i; if (x == n && y == m) { // 如果到达终点 count++; // 路径计数加一 } for (i = 0; i < 2; i++) { // 遍历两个移动方向 int tx = x + xx[i]; int ty = y + yy[i]; // 判断边界条件以及是否可以访问 if (tx > n || ty > m || tx < 1 || ty < 1 || a[tx][ty] != 0) { continue; } a[tx][ty] = 1; // 标记当前位置为已访问 dfs(tx, ty); // 继续递归搜索 a[tx][ty] = 0; // 回溯,恢复状态 } } int main() { scanf("%d%d", &n, &m); // 输入方格的行数和列数 init(); // 初始化方格 dfs(1, 1); // 从起点(1,1)开始搜索 printf("%d\n", count); // 输出路径总数 return 0; } ``` #### 算法说明 - **初始化**:通过`init()`函数将偶数行和列标记为障碍物[^1]。 - **深度优先搜索(DFS)**:使用递归方法遍历所有可能路径,当到达终点时增加路径计数。 - **回溯**:在每次递归返回时,恢复当前节点的状态,以便尝试其他路径[^1]。 ### 注意事项 - 此代码假设输入的`n`和`m`不会超过30,因此定义了`a[31][31]`数组。 - 如果需要支持更大的方格,可以动态分配内存或调整数组大小。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值