求助,关于程序RE
  • 板块学术版
  • 楼主zhjzhmh
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/10/24 21:48
  • 上次更新2023/10/27 06:04:23
查看原帖
求助,关于程序RE
233815
zhjzhmh楼主2022/10/24 21:48
#include<bits/stdc++.h>
using namespace std;
const int dx[]={0,1,0,-1,0};
const int dy[]={0,0,1,0,-1};
int n,m,bo[60][60],xx,yy,KK,B[60][60],bk[60],p,b[60][60],ans;
char ch,c[60][60];
struct node{int x,y;};
struct kuai{int num,key[30];vector<node> door;}K[2510];
queue<node> q;
void bfs(int qx,int qy)
{
	q.push((node){qx,qy});bo[qx][qy]=++p;K[p].num=1;if(c[qx][qy]>='a'&&c[qx][qy]<='z') K[p].key[c[qx][qy]-'A'+1]++,K[p].num--;
	while(!q.empty())
	{
		node u=q.front();q.pop();
		if(qx==1&&qy==3) cout<<u.x<<" "<<u.y<<endl;
		for(int i=1;i<=4;i++)
		{
			int cx=u.x+dx[i],cy=u.y+dy[i];
			if(cx<1||cx>n||cy<1||cy>m||b[cx][cy]||bo[cx][cy]) continue;
			if(qx==1&&qy==3) cout<<u.x<<" "<<u.y<<" "<<cx<<" "<<cy<<endl;
			if(c[cx][cy]>='A'&&c[cx][cy]<='Z')
			{
				cout<<cx<<' '<<cy;//第24行
				K[p].door.push_back((node){cx,cy});
				cout<<endl<<cx<<" "<<cy;//第26行
				continue;
			}
			if(cx==xx&&cy==yy) {KK=p;continue;}
			if(c[cx][cy]>='a'&&c[cx][cy]<='z') K[p].key[c[cx][cy]-'a'+1]++,K[p].num--;
			K[p].num++;q.push((node){cx,cy});bo[cx][cy]=p;
		}
	}
}
int dfs(int x,int y,kuai u)
{
	int ans=0;
	for(int i=1;i<=4;i++)
	{
		int cx=x+dx[i];
		int cy=y+dy[i];
		if(cx<1||cx>n||cy<1||cy>m||b[cx][cy]) continue;
		if(bo[cx][cy]>0&&!bk[bo[cx][cy]])
		{
			if(bo[cx][cy]==KK) return 1; 
			bk[bo[cx][cy]]=1;
			for(int j=1;j<=26;j++) u.key[j]+=K[bo[cx][cy]].key[j];
			for(int i=0;i<=K[bo[cx][cy]].door.size()-1;i++)
			if(u.key[c[K[bo[cx][cy]].door[i].x][K[bo[cx][cy]].door[i].y]-'A'+'a']&&!B[K[bo[cx][cy]].door[i].x][K[bo[cx][cy]].door[i].y])
			{
				u.key[c[K[bo[cx][cy]].door[i].x][K[bo[cx][cy]].door[i].y]-'A'+'a']--;
				B[K[bo[cx][cy]].door[i].x][K[bo[cx][cy]].door[i].y]=1;
				ans|=dfs(K[bo[cx][cy]].door[i].x,K[bo[cx][cy]].door[i].y,u);
				B[K[bo[cx][cy]].door[i].x][K[bo[cx][cy]].door[i].y]=0;
				u.key[c[K[bo[cx][cy]].door[i].x][K[bo[cx][cy]].door[i].y]-'A'+'a']++;
			}
			for(int j=1;j<=26;j++) u.key[j]-=K[bo[cx][cy]].key[j];
			bk[bo[cx][cy]]=0;
		} 
		else if(u.key[c[cx][cy]-'A'+'a'])
		{
		 	u.key[c[cx][cy]-'A'+'a']--;
		 	B[cx][cy]=1;
		 	ans|=dfs(cx,cy,u);
		 	B[cx][cy]=0;
		 	u.key[c[cx][cy]-'A'+'a']++;
		}
	}
	return ans;
}
int Dfs(int kk)
{
	memset(B,0,sizeof(B));
	memset(bk,0,sizeof(bk));
	bk[kk]=1;int ans=0;kuai p;
	for(int i=1;i<=26;i++) p.key[i]+=K[kk].key[i];
	if(K[kk].door.empty()) return 0;
	for(int i=0;i<=K[kk].door.size()-1;i++)
	if(p.key[c[K[kk].door[i].x][K[kk].door[i].y]-'A'+'a'])
	{
		p.key[c[K[kk].door[i].x][K[kk].door[i].y]-'A'+'a']--;
		B[K[kk].door[i].x][K[kk].door[i].y]=1;
		ans|=dfs(K[kk].door[i].x,K[kk].door[i].y,p);
		B[K[kk].door[i].x][K[kk].door[i].y]=0;
		p.key[c[K[kk].door[i].x][K[kk].door[i].y]-'A'+'a']++;
	}
	return ans;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	  for(int j=1;j<=m;j++)
	  {
	  	  cin>>ch;
	  	  if(ch=='#') b[i][j]=1;
		  if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) c[i][j]=ch;
		  if(ch=='*') xx=i,yy=j;
	  }
	for(int i=1;i<=n;i++)
	  for(int j=1;j<=m;j++)
	    if(!bo[i][j]&&!b[i][j])
	      bfs(i,j);
	cout<<p;
	for(int i=1;i<=p;i++) if(K[i].num&&Dfs(i)) ans+=K[i].num;
	cout<<ans;
    return 0;
}

求助为什么此程序输出24行之后停止运行,即不运行26行

3 5 
a#a#*
#..#.
a..A.

RE输入数据

2022/10/24 21:48
加载中...