样例都对但是提交一片红,求debug,看了题解感觉写的挺类似的。。。
查看原帖
样例都对但是提交一片红,求debug,看了题解感觉写的挺类似的。。。
209758
AdGats楼主2020/9/21 21:14
#include<bits/stdc++.h>
using namespace std;
const int N=105;
int read(){
	int a=0;
	char c=getchar();
	while(c<'0'||c>'9')	c=getchar();
	while(c>='0'&&c<='9')	a=a*10+c-'0',c=getchar();
	return a;
}
int ans=-1;
int alpha[4][2]={
	1,0,
	-1,0,
	0,1,
	0,-1
};
int m=read(),n=read();
int t[N][N],t1[N][N];
void dfs(int sum,int x,int y,bool used){
	cout<<x<<' '<<y<<' '<<sum<<endl;
	if(x==0||x>m||y==0||y>m)	return ;
	if(t1[x][y]<=sum)	return;
	t1[x][y]=sum; 
	if(x==m&&y==m){
		ans=sum;
		return ;
	}
	for(int i=0;i<4;i++){
		int x1=x+alpha[i][0],y1=y+alpha[i][1];
		if(t[x1][y1]){
			if(t[x1][y1]==t[x][y])
				dfs(sum,x1,y1,0);
			else
				dfs(sum+1,x1,y1,0);
		}
		else if(used==0){
			t[x1][y1]=t[x][y];	
			dfs(sum+2,x1,y1,1);
			t[x1][y1]=0;
		}
	}
}
int main(){
	for(int i=1;i<=n;i++){
		int x=read(),y=read(),c=read();
		if(c==1)	t[x][y]=2;
		else t[x][y]=1;
		//cout<<x<<' '<<y<<' '<<t[x][y]<<endl;
	}
	for(int i=1;i<=m;i++)
		for(int j=1;j<=m;j++)	t1[i][j]=1e9+5;
	dfs(0,1,1,0);
	cout<<ans<<endl;
	return 0;
}

2020/9/21 21:14
加载中...