bfs 40pts求调!
查看原帖
bfs 40pts求调!
1401814
cuber_jkz楼主2024/10/6 21:23
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
int n,m,a[505][505],vis[505][505],ai[505],cnt1,cnt2;
int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};

bool cmp(int x,int y) {
    return a[1][x]>a[1][y];
}

bool judge() {
	for(int i=1;i<=m;i++)
		if(!vis[n][i])
			return false;
	return true;
}

int main() {
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            scanf("%d",&a[i][j]);
    for(int i=1;i<=m;i++)
        ai[i]=i;
    sort(ai+1,ai+1+m,cmp);
    for(int i=1;i<=m;i++) {
        queue<int> q;
        if(vis[1][ai[i]])
            continue;
        q.push(1),q.push(ai[i]);
        if(judge())
        	break;
        cnt1++;
        vis[1][ai[i]]=true;
        while(!q.empty()) {
            int nox=q.front();q.pop();
            int noy=q.front();q.pop();
            for(int j=0;j<4;j++) {
                int nexx=nox+dx[j];
                int nexy=noy+dy[j];
                if(nexx<1||nexx>n||nexy<1||nexy>m)
                    continue;
                if(a[nexx][nexy]>=a[nox][noy]||vis[nexx][nexy])
                    continue;
                q.push(nexx),q.push(nexy);
                vis[nexx][nexy]=true;
                if(judge())
        			break;
            }
        }
    }
    for(int i=1;i<=m;i++)
    	if(!vis[n][i])
    		cnt2++;
    if(cnt2)
    	printf("0\n%d",cnt2);
    else 
    	printf("1\n%d",cnt1);
}
2024/10/6 21:23
加载中...