求助P3956 [NOIP2017 普及组] 棋盘
  • 板块学术版
  • 楼主wanran
  • 当前回复8
  • 已保存回复8
  • 发布时间2022/7/22 14:07
  • 上次更新2023/10/27 18:56:00
查看原帖
求助P3956 [NOIP2017 普及组] 棋盘
698619
wanran楼主2022/7/22 14:07

dfs 55分!!!

#include<bits/stdc++.h>
using namespace std;
int m,n;
int a[101][101];
int v[101][101];
int minn=0x3f3f3f3f;
int dis[5][2]={{0,0},{-1,0},{0,1},{1,0},{0,-1}};
void f(int x,int y,int k,int sum){
	if(x==m && y==m){
		minn=min(minn,sum);
	} 
	for(int i=1;i<=4;i++){
		int xx=x+dis[i][0];
		int yy=y+dis[i][1];
		if(xx>=1 && xx<=m && yy>=1 &&yy<=m && v[xx][yy]==0){
			if(a[x][y]==a[xx][yy]){
				v[xx][yy]=1;
				f(xx,yy,1,sum);
				v[xx][yy]=0;
			} 
			else if(a[x][y]!=a[xx][yy] && a[xx][yy]!=0){
				v[xx][yy]=1;
				f(xx,yy,1,sum+1);
				v[xx][yy]=0;
			}
			else if(a[x][y]!=a[xx][yy] && a[xx][yy]==0 && k==1){
				v[xx][yy]=1;
				a[xx][yy]=a[x][y];
				f(xx,yy,0,sum+2);
				v[xx][yy]=0;
				a[xx][yy]=0;
			}
		}
	}
}
int main(){
	cin>>m>>n;
	for(int i=1;i<=n;i++){
		int x,y,c;
		cin>>x>>y>>c;
		c++;
		a[x][y]=c;
	}
	v[1][1]=1;
	f(1,1,1,0);
	if(minn==0x3f3f3f3f){
		cout<<-1;
		return 0;
	}
	cout<<minn;
} 

但我不想用bfs 有没有大佬帮忙优化一下dfs

2022/7/22 14:07
加载中...