社区讨论

求助大佬

P1126[CERC1996] 机器人搬重物参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lo1p76nw
此快照首次捕获于
2023/10/23 00:43
2 年前
此快照最后确认于
2023/11/03 01:24
2 年前
查看原帖
大佬们能不能帮蒟蒻看看我的代码为啥不出数,我的思路对不对
CPP
#include<bits/stdc++.h>
using namespace std;
int n,m,a[55][55],ex,ey;
bool vis[110][110];
struct node{
    int x,y,d,f;
    node(int xx,int yy,int dd,int ff){
        x=xx,y=yy,d=dd,f=ff;
    }
};
int newx(node no,int i){
	int s=no.f;
	if(s==1) return no.x-i;
	else if(s==3) return no.x+i;
	return 0;
}
int newy(node no,int i){
    int s=no.f;
	if(s==4) return no.y-i;
	else if(s==2) return no.y+i;
	return 0;
}
bool in(int x, int y) {
    return 0 < x && x < n && 0 < y && y < m;
}
int bfs(int sx,int sy,int sb){
    queue<node> q;
    q.push(node(sx,sy,0,sb));
    vis[sx][sy]=true;
    while(!q.empty()){
        node now=q.front();
        q.pop();
        for(int i=1;i<=3;i++){
            int tx=newx(now,i);
            int ty=newy(now,i);
            if(in(tx,ty)&&a[tx][ty]!=1&&!vis[tx][ty]){
                if(tx==ex&&ty==ey){
                    return now.d+1;
                } else{
                    vis[tx][ty]=true;
                    q.push(node(tx,ty,now.d+1,now.f));
                    //printf("%d %d\n",tx,ty);
                }
            }
        }
        int nx=now.f;
        now.f=nx+1<5?nx+1:1;
        now.d++;
        q.push(now);
        now.f=nx-1>0?nx-1:4;
        q.push(now);
    }
    return -1;
}
int main(){
	scanf("%d%d",&n,&m);
	memset(a,0,sizeof(a));
	for(int i=1;i<=n;i++){
		for(int j=1,x;j<=m;j++){
			scanf("%d",&x);
			if(x==1){
				a[i-1][j-1]=a[i-1][j]=a[i][j-1]=a[i][j]=1;
			}
		}
	}
	memset(vis,0,sizeof(vis));
	int x,y,sb;
	char c;
	scanf("%d%d%d%d",&x,&y,&ex,&ey);
	cin>>c;
	if(c=='N')sb=1;
	if(c=='E')sb=2;
	if(c=='S')sb=3;
	if(c=='W')sb=4;
	printf("%d\n",bfs(x,y,sb));
}

谢谢大佬

回复

0 条回复,欢迎继续交流。

正在加载回复...