42分!求调
查看原帖
42分!求调
1373155
rhy1314楼主2025/1/2 22:08

球球啦

#include <bits/stdc++.h>
using namespace std;
const int die[4][2]={{-1,-1},{-1,1},{1,-1},{1,1}};
const int ab[4]={2,1,1,2};
const int cd[4][2] ={{-1,-1},{-1,0},{0,-1},{0,0}};
int G[505][505],D[505][505];
struct P{int x,y,D;} u;
int read_ch(){
    char c;
    while((c=getchar())!='/'&&c!='\\');
    return c=='/'?1:2;
}
int main() {
    int n,m;cin>>n>>m;
    memset(D,0x3f,sizeof(D));
    for(int i=1;i<=n;++i)
        for(int j=1;j<=m;++j)G[i][j]=read_ch();
    deque<P>dq;
    dq.push_back((P){1,1,0});
    D[1][1]=0;
    while(!dq.empty()){
        u=dq.front(),dq.pop_front();
        int nx,ny;
        for(int i=0;i<=3;++i){
            nx=u.x+die[i][0];ny=u.y+die[i][1];
            int d=0;
            d=G[u.x+cd[i][0]][u.y+cd[i][1]]!=ab[i];
            if(nx&ny&&nx<n+2&&ny<m+2&&D[nx][ny]>D[u.x][u.y]+d){
                D[nx][ny]=D[u.x][u.y]+d;
                if(d==0) dq.push_front((P){nx,ny,D[nx][ny]});
                else dq.push_back((P){nx,ny,D[nx][ny]});
                if(nx==n+1&&ny==m+1)break;
            }
        }
    }
    if(D[n+1][m+1]!=0x3f3f3f3f) cout<<D[n+1][m+1];
    else cout<<"NO SOLUTION";
    return 0;
}
2025/1/2 22:08
加载中...