求助大犇!!!
查看原帖
求助大犇!!!
208213
12297524m楼主2021/11/14 21:35
#include<bits/stdc++.h>
using namespace std;

int ma[105][105],mo[105][105];
int m,n,x,y,c;

void dfs(int x,int y,int c,int q,bool m){
	if(x>m||y>m||x<1||y<1) return;
	mo[x][y]=q;
	
	if(ma[x][y]!=-1){
		if(q+abs(c-ma[x+1][y])<mo[x+1][y]) dfs(x+1,y,ma[x+1][y],q+abs(c-ma[x+1][y]),1);
		if(q+abs(c-ma[x-1][y])<mo[x-1][y]) dfs(x-1,y,ma[x-1][y],q+abs(c-ma[x-1][y]),1);
		if(q+abs(c-ma[x][y+1])<mo[x][y+1]) dfs(x,y+1,ma[x][y+1],q+abs(c-ma[x][y+1]),1);
		if(q+abs(c-ma[x][y-1])<mo[x][y-1]) dfs(x,y-1,ma[x][y-1],q+abs(c-ma[x][y-1]),1);
	}
	if(ma[x][y]==1){
		if(m==1){
			if(q+2<mo[x+1][y]) dfs(x+1,y,c,q+2,0);
			if(q+2<mo[x-1][y]) dfs(x-1,y,c,q+2,0);
			if(q+2<mo[x][y+1]) dfs(x,y+1,c,q+2,0);
			if(q+2<mo[x][y-1]) dfs(x,y-1,c,q+2,0);
		}
	}
	
	return;
}

int main(){
	std::ios::sync_with_stdio(0);
	cin>>m>>n;
	for(int i=1;i<=m;i++) for(int j=1;j<=m;j++) ma[i][j]=-1;
	for(int i=1;i<=m;i++) for(int j=1;j<=m;j++) mo[i][j]=0x3f3f3f3f;
	
	for(int i=1;i<=n;i++){
		cin>>x>>y>>c;
		ma[x][y]=c;
	}
	
	dfs(1,1,ma[1][1],0,1);
	
	if(mo[m][m]==0x3f3f3f3f) cout<<"-1"<<endl;
	else cout<<mo[m][m]<<endl;
	
	return 0;
} 

为什么第一个样例会输出-1啊emm

2021/11/14 21:35
加载中...