关于getchar与cin
查看原帖
关于getchar与cin
718722
adjective楼主2023/7/13 15:27
#include<bits/stdc++.h>
using namespace std;

int n,m;
int x1,y3,x2,y2,x,y;
char aaa;
int a[200][200];
int minn1=1e10,minn2=1e10;
int dis[200][200];

int xy[20][20]=
{
{0,0,1,-1,1,1,-1,-1},
{1,-1,0,0,1,-1,-1,1}
};

queue <pair<int,int> > q;

void bfs(int x,int y){
    q.push({x,y});
    while(!q.empty()){
        int xx=q.front().first;
        int yy=q.front().second;
        q.pop();
        for(int i=0;i<8;i++){
            int xxx=xx+xy[0][i];
            int yyy=yy+xy[1][i];
            if(!a[xxx][yyy]||dis[xxx][yyy]||xxx>n||yyy>m||xxx<1||yyy<1) continue;
            dis[xxx][yyy]=dis[xx][yy]+1;
            q.push({xxx,yyy});
        }
    }
}

int main(){
    scanf("%d %d", &n, &m);
    bool f=1;
    int i,j;
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            cin>>aaa;
            if(aaa=='X'){
                a[i][j]=0;
                if(f) x1=i-1,y3=j,f=0;
                x2=i+1,y2=j;
            }
            else{
                a[i][j]=1;
                if(aaa=='*') x=i,y=j;
            }
        }
    }
	//cout<<x<<" "<<y<<endl<<x1<<" "<<y3<<endl<<x2<<" "<<y2;
    if(x<=x1&&y==y2){
        x1=x2,y3=y2;
        for(i=x1;i<=n;i++) a[i][y3]=0;
    }
    else{
        for(i=1;i<=x1;i++) a[i][y3]=0;
    }
    bfs(x,y);
    /*
    for(int i=1;i<=n;i++){
    	for(int j=1;j<=m;j++) cout<<dis[i][j];
    	cout<<endl;
	}
	*/
    for(i=x1-1;i<=x1+1;i++){
    	if(a[i][y3-1])
        minn1=min(minn1,dis[i][y3-1]);
        if(a[i][y3+1])
		minn2=min(minn2,dis[i][y3+1]);
    }
    cout<<minn1+minn2+2;
    return 0;
}
#include<bits/stdc++.h>
using namespace std;

int n,m;
int x1,y3,x2,y2,x,y;
char aaa;
int a[200][200];
int minn1=1e10,minn2=1e10;
int dis[200][200];

int xy[20][20]=
{
{0,0,1,-1,1,1,-1,-1},
{1,-1,0,0,1,-1,-1,1}
};

queue <pair<int,int> > q;

void bfs(int x,int y){
    q.push({x,y});
    while(!q.empty()){
        int xx=q.front().first;
        int yy=q.front().second;
        q.pop();
        for(int i=0;i<8;i++){
            int xxx=xx+xy[0][i];
            int yyy=yy+xy[1][i];
            if(!a[xxx][yyy]||dis[xxx][yyy]||xxx>n||yyy>m||xxx<1||yyy<1) continue;
            dis[xxx][yyy]=dis[xx][yy]+1;
            q.push({xxx,yyy});
        }
    }
}

int main(){
    scanf("%d %d", &n, &m);
    getchar();
    bool f=1;
    int i,j;
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            aaa=getchar();
            if(aaa=='X'){
                a[i][j]=0;
                if(f) x1=i-1,y3=j,f=0;
                x2=i+1,y2=j;
            }
            else{
                a[i][j]=1;
                if(aaa=='*') x=i,y=j;
            }
        }
        getchar();
    }
	//cout<<x<<" "<<y<<endl<<x1<<" "<<y3<<endl<<x2<<" "<<y2;
    if(x<=x1&&y==y2){
        x1=x2,y3=y2;
        for(i=x1;i<=n;i++) a[i][y3]=0;
    }
    else{
        for(i=1;i<=x1;i++) a[i][y3]=0;
    }
    bfs(x,y);
    /*
    for(int i=1;i<=n;i++){
    	for(int j=1;j<=m;j++) cout<<dis[i][j];
    	cout<<endl;
	}
	*/
    for(i=x1-1;i<=x1+1;i++){
    	if(a[i][y3-1])
        minn1=min(minn1,dis[i][y3-1]);
        if(a[i][y3+1])
		minn2=min(minn2,dis[i][y3+1]);
    }
    cout<<minn1+minn2+2;
    return 0;
}

第二份代码(10pts)只是将第一份代码(AC)的cin改为getchar为什么不对

2023/7/13 15:27
加载中...