2024CSP-J 普及组第二轮试题及解析(第二题、地图探险(explore))

#include<bits/stdc++.h>
using namespace std;
int s[1005][1005],t[1005][1005];
int const dx[]={0,1,0,-1},dy[]={1,0,-1,0};//四个方向 
int main()

{

int T;    

cin >>T;

while(T--)

{

int n,m,k,x,y,d;

cin >>n>>m>>k;               //n,m地图行与列  k是走几次 

cin >>x >>y >>d;             //x,y出发点坐标,d是方向 

char c;

for(int i=1;i <=n;i++)        //输入地图 

	for(int j=1;j<=m;j++)

	{

		cin>>c;

		if(c =='x')

			s[i][j]=1;

		else

			s[i][j]=0;

		t[i][j]=0;

	}
	t[x][y]=1;             //出发点 


	for(int i=0;i<=n+1;i++)  //绘制边界 

		s[i][0]=s[i][m+1]=1;

	for(int i=0;i<=m+1;i++) //绘制边界 

		s[0][i]=s[n+1][i]=1;

	while(k--)       //模拟探险过程 

	{

		if(s[x+dx[d]][y+dy[d]]) //有障碍物,调整方向 

			d =(d+1)%4; 

		else               // 没障碍物,走过去 

			x +=dx[d],y +=dy[d];

		t[x][y]=1;    //标记走过 

	}

	int ans =0;

	for(int i=1;i<=n;i++)

		for(int j=1;j<=m;j++)

			ans +=t[i][j];   //统计结果 

	cout <<ans <<endl;   //输出答案 

	}

	return 0;

}

猜你喜欢

转载自blog.csdn.net/weixin_60445850/article/details/143267086