laolaolao
  • 板块灌水区
  • 楼主_User114514_
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/2 19:35
  • 上次更新2024/8/2 20:49:51
查看原帖
laolaolao
1338740
_User114514_楼主2024/8/2 19:35

https://www.luogu.com.cn/discuss/877031

新求条代码:

#include<bits/stdc++.h>
using namespace std;
int n=1,ans=0x3f3f3f3f;
//bool vis[255];
char a[105][105];
const int tx[]={0,0,1,-1};
const int ty[]={1,-1,0,0};
/*void bfs(){
	queue<int> qx,qy;
	qx.push(0),qy.push(0);
	ans[0][0]=0;
	while(!qx.empty()){
		int x=qx.front(),y=qy.front();
		qx.pop(),qy.pop();
		cout<<x<<" "<<y<<" "<<ans[x][y]<<endl; 
		for(int i=0;i<4;i++){
			int xx=x+tx[i],yy=y+ty[i];
			if(xx>=0&&yy>=0&&xx<n&&yy<n){
				if(a[xx][yy]>='A'&&a[xx][yy]<='Z'&&vis[a[xx][yy]+32]==0&&ans[xx][yy]==0x3f3f3f3f){
					ans[xx][yy]=ans[x][y]+1;
					vis[a[xx][yy]+32]=1;
					qx.push(xx);
					qy.push(yy);
					vis[a[xx][yy]+32]=0;
				}else if(a[xx][yy]>='a'&&a[xx][yy]<='z'&&vis[a[xx][yy]-32]==0&&ans[xx][yy]==0x3f3f3f3f){
					ans[xx][yy]=ans[x][y]+1;
					vis[a[xx][yy]-32]=1;
					qx.push(xx);
					qy.push(yy);
					vis[a[xx][yy]-32]=0;
				}
			}
		}
	} 
}*/
char tobig(char ch){
	return (ch-'a'+'A');
}
char tosmall(char ch){
	return (ch-'A'+'a');
}
bool isbig(char ch){
	return (ch>='A'&&ch<='Z');
}
bool issmall(char ch){
	return (ch>='a'&&ch<='z');
}
map<char,int> vis;
void dfs(int x,int y,int cost){
	//cout<<x<<" "<<y<<" "<<cost<<"\n";
	if((x||y)&&vis[a[x][y]])return;
	if(x==n-1&&y==n-1){
		ans=min(ans,cost);
		return;
	}
	for(int i=0;i<4;i++){
		int xx=x+tx[i],yy=y+ty[i];
		if(xx>=0&&xx<n&&yy>=0&&yy<n){
			if(a[xx][yy]>='a'&&a[xx][yy]<='z'){
				if(vis[a[xx][yy]-'a'+'A'])continue;
				vis[a[xx][yy]-'a'+'A']=1;
				dfs(xx,yy,cost+1);
				vis[a[xx][yy]-'a'+'A']=0;
			}else if(a[xx][yy]>='A'&&a[xx][yy]<='Z'){
				if(vis[a[xx][yy]-'A'+'a'])continue;
				vis[a[xx][yy]-'A'+'a']=1;
				dfs(xx,yy,cost+1);
				vis[a[xx][yy]-'A'+'a']=0;
			}
		}
	}
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++)cin>>a[i][j];
	} 
	if(isbig(a[0][0]))vis[tosmall(a[0][0])]=1;
	else vis[tobig(a[0][0])]=1;
	dfs(0,0,0);
	cout<<ans;
	return 0;
}
2024/8/2 19:35
加载中...