WA求助(P4667)
  • 板块题目总版
  • 楼主lcy0506
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/7/17 18:20
  • 上次更新2024/7/17 18:37:37
查看原帖
WA求助(P4667)
1044302
lcy0506楼主2024/7/17 18:20

题目链接

#include <bits/stdc++.h>
using namespace std;
char a[1001][1001];
int T,n,m,qx[10]={-1,1,1,-1},qy[10]={1,1,-1,-1};
int f[1001][1001][6],vis[1001][1001],d[1001][1001];
void bfs()
{
	memset(vis,0,sizeof(vis));
	memset(d,0x3f,sizeof(d));
	deque< pair<int,int> >q;
	q.push_front(make_pair(1,1));
	d[1][1]=0;
	while(q.size())
	{
		pair<int,int> u=q.front();
		q.pop_front();
		int x=u.first,y=u.second;
		vis[x][y]=1;		
		for(int i=0;i<4;i++)
		{
			int nx=x+qx[i];
			int ny=y+qy[i];
			if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&vis[nx][ny]==0)
			{
//				if(f[x][y][i])
//				{
//					if(d[x][y]<d[nx][ny])
//					{
//						d[nx][ny]=d[x][y];
//						q.push_front(make_pair(nx,ny));
//					}				
//				}
//				else
//				{
//					if(d[x][y]+1<d[nx][ny])
//					{
//						d[nx][ny]=d[x][y]+1;
//						q.push_back(make_pair(nx,ny));
//					}						
//				}
                int dis=d[x][y]+f[x][y][i];
                if(dis<d[nx][ny])
                {
                	d[nx][ny]=dis;
                	q.push_front(make_pair(nx,ny));
				}
			}
		}
	}
	return;
}
int main()
{
	cin>>T;
	for(int k=1;k<=T;k++)
    {
		scanf("%d%d",&n,&m);
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=m;j++)
			{
				scanf("%c",&a[i][j]);
				if(a[i][j]=='/')
				{
					f[i+1][j][0]=0;
					f[i][j+1][2]=0;
					f[i][j][1]=1;
					f[i+1][j+1][3]=1;
				}
				else
				{
					f[i+1][j][0]=1;
					f[i][j+1][2]=1;
					f[i][j][1]=0;
					f[i+1][j+1][3]=0;					
				}
			}
		}
		n++,m++;
		bfs();
		if(vis[n][m])
		cout<<d[n][m]<<endl;
		else
		cout<<"NO SOLUTION"<<endl;	
//		memset(a,'0',sizeof(a));
	}
}
2024/7/17 18:20
加载中...