深搜题,只能向右和向下移动,预先设定终点坐标(n-1,n-1),注意使用 __int64 存储路径数。
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 40;
char mp[MAXN][MAXN]; //地图
int vis[MAXN][MAXN]; //访问情况
__int64 dp[MAXN][MAXN]; //路径数,dp[i][j]表示从点(i,j)到终点的路径数
const int nx[] = { 0,1 }; //x轴移动
const int ny[] = { 1,0 }; //y轴移动
int n;
//深搜,搜索从点(x,y)到终点的路径数
__int64 DFS(int x, int y)
{
if (x < 0 || x > n - 1 || y < 0 || y > n - 1)
return 0;
if (vis[x][y])
return dp[x][y];
vis[x][y] = 1;
for (int i = 0; i < 2; i++)
dp[x][y] += DFS(x + (mp[x][y] - '0') * nx[i], y + (mp[x][y] - '0') * ny[i]);
return dp[x][y];
}
int main()
{
while (cin >> n)
{
if (n == -1)
break;
for (int i = 0; i < n; i++)
{
cin >> mp[i];
}
memset(vis, 0, sizeof(vis));
memset(dp, 0, sizeof(dp));
vis[n - 1][n - 1] = 1;
dp[n - 1][n - 1] = 1; //终点设为(n-1,n-1)
cout << DFS(0, 0) << endl;
}
return 0;
}
继续加油。
本文介绍了一个基于深度优先搜索(DFS)的算法,用于在一个只能向右和向下移动的地图上计算从起点到达终点的所有可能路径数量。算法使用了动态规划的思想,预设终点坐标,并利用__int64类型变量存储路径数,确保大数值计算的准确性。
4万+

被折叠的 条评论
为什么被折叠?



