题解 | #迷宫问题#

迷宫问题

https://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc

#include <cstring>
#include <iostream>
#include <memory.h>
using namespace std;
int ans[100],len,t[100],n,m,maze[11][11],ma[11][11];

void dfs(int i,int j,int k){
    if(i==n&&j==m) {
        k--;
        if(k<len) {
            memcpy(ans, t, sizeof(int)*(k+1));
            len=k;
        }
        return;
    }
    if(ma[i][j]==1) return;
    ma[i][j]=1;
    if(i<n&&maze[i+1][j]==0) {
        t[k]=1;
        dfs(i+1,j,k+1);
    }
    if(j<m&&maze[i][j+1]==0) {
        t[k]=2;
        dfs(i,j+1,k+1);
    }
    if(i>1&&maze[i-1][j]==0) {
        t[k]=3;
        dfs(i-1,j,k+1);
    }
    if(j>1&&maze[i][j-1]==0) {
        t[k]=4;
        dfs(i,j-1,k+1);
    }
    ma[i][j]=0;
    return;
}
int main() {
    int i,j,x,y;
    cin>>n>>m;
    len=100000;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            cin>>maze[i][j];
    dfs(1,1,1);
    x=y=0;
    cout<<'('<<0<<','<<0<<')'<<endl;
    for(i=1;i<=len;i++){
        //cout<<ans[i]<<endl;
        switch (ans[i]) {
            case 1: x++;break;
            case 2: y++;break;
            case 3: x--;break;
            case 4: y--;break;
        }
        cout<<'('<<x<<','<<y<<')'<<endl;
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

不是从1开始赋值的memcpy(ans, t, sizeof(int)*(k+1));k要加1,当然,从1赋值就很不对

全部评论

相关推荐

浩浩没烦恼:一二面加起来才一个小时? 我一面就一个小时多了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务