在 C 中的矩阵中给定开始和结束坐标的点之间找到一条路

问题描述 投票:0回答:0

在下面的代码中,我尝试编写了一个程序,检查从起始坐标(sx,sy)到(dx,dy)是否存在由0组成的路径。对于从 (0,0) 到 (3,3) 的实例,似乎有一条路径为 0,输出应该为真。但我没有得到正确的结果。它不按我想要的方式工作。你能帮我找出我的错误吗?

#include <stdio.h>
#include <stdbool.h>
#define N 5
void dfs(int adj[][N], int i, int j, bool visited[][N]);
bool hasPathDfs(int adj[][N], int sx, int sy, int dx, int dy);

int main()
{
    int matrix[N][N] = {
        {1, 0, 0, 0, 0},
        {2, 3, 0, 3, 1},
        {0, 4, 0, 0, 0},
        {0, 0, 0, 2, 4},
        {5, 0, 0, 2, 5}};
  
    // Find path
    int sx = 0, sy = 0, dx = 3, dy = 3;
    printf("Find path from (%d,%d) to (%d,%d):\n", sx, sy, dx, dy);
    printf("DFS: %s\n", hasPathDfs(matrix, sx, sy, dx, dy) ? "true" : "false");

    return 0;
}



// Function Declarations
void dfs(int adj[][N], int i, int j, bool visited[][N])
{
    if (i < 0 || i >= N || j < 0 || j >= N || adj[i][j] != 0 || visited[i][j])
    {
        return;
    }
    visited[i][j] = true;
    dfs(adj, i - 1, j, visited); // Move left
    dfs(adj, i + 1, j, visited); // Move Right
    dfs(adj, i, j - 1, visited); // Move top
    dfs(adj, i, j + 1, visited); // Move bottom
}
bool hasPathDfs(int adj[][N], int sx, int sy, int dx, int dy)
{
    bool visited[N][N];
    int i,j;
    for ( i = 0; i < N; i++)
    {
        for ( j = 0; j < N; j++)
        {
            visited[i][j] = false;
        }
    }
    dfs(adj, sx, sy, visited);
    if (!visited[dx][dy])
    {
        return false;
    }
    return true;
}


arrays c matrix path
© www.soinside.com 2019 - 2024. All rights reserved.