求调,和楼下一样只输出-1
查看原帖
求调,和楼下一样只输出-1
1252442
lucy2012楼主2024/8/21 16:27

感觉memset没问题QwQ

#include<bits/stdc++.h>
using namespace std;
int m,n,a[110][110],b[110][110],vis[110][110],minn=1e9,ans=0;
int dx[]={1,0,-1,0},dy[]={0,1,0,-1};
void dfs(int x,int y,int tmp){
	for(int i=0;i<4;i++){
		int xx=x+dx[i],yy=y+dy[i],q;
		if(xx<=0||xx>m||yy<=0||yy>m||vis[xx][yy]){
		    continue;
		}
		if(tmp!=-1){
			if(a[xx][yy]!=-1){
				if(tmp!=a[xx][yy]){
                    q=1;
                }else{
                    q=0;
                }
			}else{
				continue;
			}
		}else{
			if(a[xx][yy]==-1){
                q=2;
                tmp=a[x][y];
            }else{
                if(a[x][y]!=a[xx][yy]){
                    q=1;
                }else{
                    q=0;
                }
            }
		}
		if(b[xx][yy]>b[x][y]+q){
            b[xx][yy]=b[x][y]+q;
            vis[x][y]=1;
            dfs(xx,yy,tmp);
            vis[x][y]=0;
        } 
	}
	return;
}
int main(){   
    cin>>m>>n;
    for(int i=1;i<=m;i++){
    	for(int j=1;j<=m;j++){
    		b[i][j]=1e9;
		}
	}
    memset(a,0xff,sizeof(a));//memset(a,-1,sizeof(a));
    for(int i=1;i<=n;i++){
    	int x,y,tmp;
    	cin>>x>>y>>tmp;
    	a[x][y]=tmp;
	}
	vis[1][1]=1;
	dfs(1,1,-1);
	if(b[m][m]==1e9)
	   cout<<-1;
	else
	   cout<<b[m][m];
    return 0;
}
2024/8/21 16:27
加载中...