社区讨论

请求大佬指正,过了3点,T了7点

P1189[COI 2001] SEARCH参与者 3已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@mi7rh52q
此快照首次捕获于
2025/11/21 02:25
4 个月前
此快照最后确认于
2025/11/21 02:25
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define read read()
using namespace std;

int r,c,x,y,n,m[2000];
char mp[100][100],ch[1000];
bool can[100][100];

int read
{
	int x=0,f=1;char y=getchar();
	while(y<'0'||y>'9'){if(y=='-') f=-1;y=getchar();}
	while(y>='0'&&y<='9'){x=x*10+y-'0';y=getchar();}
	return x*=f;
}

void readdata()
{
    int a;
    r=read;
    c=read;
    for(int i=0;i<=c+1;i++) can[r+1][i]=can[0][i]=1;
    for(int i=0;i<=r+1;i++) can[i][0]=can[i][c+1]=1;	
    for(int i=1;i<=r;i++)
    {
        scanf("%s",mp[i]+1);
    }
    for(int i=1;i<=r;i++)
    {
        for(int j=1;j<=c;j++)
        {
            if(mp[i][j]=='X') can[i][j]=1;
            else if(mp[i][j]=='*') {x=i;y=j;mp[i][j]='.';}
        }
    }
    n=read;
    for(int i=1;i<=n;i++)
    {
        scanf("%s",&ch);
        if(ch[0]=='N') 
        {
            m[i]=1;
            continue;
        }
        else if(ch[0]=='S') 
        {
            m[i]=2;
            continue;
        }
        else if(ch[0]=='W') 
        {
            m[i]=3;
            continue;
        } 
        else if(ch[0]=='E') 
        {
            m[i]=4;		    
            continue;
        }
    }
}

void dfs(int nx,int ny,int op)
{
    if(op>n) 
    {
        mp[nx][ny]='*';
        return;
    }
    if(m[op]==1)
    {
        for(int i=1; ;i++)
        {
        	if(can[nx-i][ny]==1) break;
        	dfs(nx-i,ny,op+1);
        }
    }
    if(m[op]==2)
    {
        for(int i=1; ;i++)
        {
        	if(can[nx+i][ny]==1) break;
        	dfs(nx+i,ny,op+1);
        }
    }
    if(m[op]==3)
    {
        for(int i=1; ;i++)
        {
        	if(can[nx][ny-i]==1) break;
        	dfs(nx,ny-i,op+1);
        }
    }
    if(m[op]==4)
    {
        for(int i=1; ;i++)
        {
        	if(can[nx][ny+i]==1) break;
        	dfs(nx,ny+i,op+1);
        }
    }
}

int main()
{
    //freopen("in.txt","r",stdin);
    readdata();
    dfs(x,y,1);
    for(int i=1;i<=r;i++)
    {
        for(int j=1;j<=c;j++)
        {
            printf("%c",mp[i][j]);
        }
        printf("\n");
    }
    return 0;
}

回复

6 条回复,欢迎继续交流。

正在加载回复...