C++66求助,悬赏两关注
查看原帖
C++66求助,悬赏两关注
1048193
PengDave楼主2024/8/2 15:54
#include<iostream>
#include<deque>
using namespace std;
struct node{
    int x,y,step;
    node(int _x=0,int _y=0,int _step=0){
        x=_x;
        y=_y;
        step=_step;
    }
};
deque<node>q;
int nt[4][2]={{1,1},{1,-1},{-1,1},{-1,-1}};
string dir="\\//\\";
int kk[4][2]={{1,1},{1,0},{0,1},{0,0}};
char a[1010][1010];
bool vis[1010][1010];
int dis[1010][1010];
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
        }
    }
    q.push_back(node(0,0,0));
    vis[0][0]=1;
    while(!q.empty()){
        int step=q.front().step,x=q.front().x,y=q.front().y;
        q.pop_front();
        if(x==n&&y==m){
            cout<<step<<endl;
            return 0;
        }
        for(int i=0;i<4;i++){
            int xx=x+nt[i][0],yy=y+nt[i][1];
            if(xx<0||xx>n||yy<0||yy>m){
                continue;
            }
            if(vis[xx][yy])continue;
            vis[xx][yy]=1;
            int px=x+kk[i][0],py=y+kk[i][1];
            if(px<1||px>n||py<1||py>m){
                continue;
            }
            if(a[px][py]==dir[i]){
                q.push_front(node(xx,yy,step));
            }else{
                q.push_back(node(xx,yy,step+1));
            }
        }
    }
    cout<<"NO SOLUTION"<<endl;
    return 0;
}
2024/8/2 15:54
加载中...