leetcode-1091. 二进制矩阵中的最短路径-C语言

该博客围绕LeetCode 1091题,即二进制矩阵中的最短路径问题展开,运用C语言进行求解。此问题属于算法领域,通过特定算法找出矩阵中最短路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
 * 算法思想:
 * bfs,从(0,0)开始广度优先搜索;
 * 相邻8个点均可以搜索;
 * 第一次搜索到(m-1, n-1)位置,当前即为最短的路径。
 * Notes:
 * 广度优先搜索过程中,使用一个队列作为缓存。
 */


typedef struct point{
    int x,y,d;
} Node;

#define LEN 0xffff

void print(int m, int n, int vst[m][n]){
    int i,j;
    for(i=0; i<m; i++){
        for(j=0; j<n; j++){
            printf("%d,", vst[i][j]);
        }printf("\n");
    }
    printf("==============");
}

int get(int **arr, int m, int n){
    int vst[m][n];
    int xs[] = {-1, -1, -1, 0, 0, 0, 1, 1, 1};
    int ys[] = {-1, 0, 1, -1, 0, 1, -1, 0, 1};
    Node qe[LEN];
    int head=0, rear=0, i, x, y, tmp;
    Node *node;
    
    memset(vst, 0, sizeof(vst));
    
    if(arr[0][0]) return -1;
    
    qe[head].x = 0;
    qe[head].y = 0;
    qe[head].d = 1;
    head++;
    vst[0][0] = 1;
    
    while(head>rear){
        node = &qe[rear++];
        tmp = node->d;
        
        if(node->x == m-1 && node->y == n-1) return node->d;
        
        
        for(i=0; i<9; i++){
            x = node->x + xs[i];
            y = node->y + ys[i];
            if(x>=0 && x<m && y>=0 && y<n && !vst[x][y] && !arr[x][y]) {
                vst[x][y] = 1;
                
                qe[head].x = x;
                qe[head].y = y;
                qe[head].d = tmp+1;
                head++;
            }
        }
        
    }
    
    print(m, n, vst);
    
    return -1;
}

int shortestPathBinaryMatrix(int** arr, int m, int* ns){
    int n = ns[0];
    
    return get(arr, m, n);
    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值