水红悬6关有注释蒟蒻求调
查看原帖
水红悬6关有注释蒟蒻求调
765461
zhangmingsheng3521楼主2023/9/27 22:33

rt.代码如下,请自己看注释。思路为dfs。提供有用纠错酌情给关

#include"bits/stdc++.h"
using namespace std;
bool m[60][60];//用于记录这个点能否通过 
char state[60][60];//用于记录这个点的答案 
char dir[1005];//用于记录方向的数组 
int r,c,n;//r,c即题目中含义,n为方向总数 
void dfs(int x,int y,int z)
{
    if (z==(n+1))//方向数组走完了,dfs结束&退出 
    {
        state[x][y]='*';
        return;
    }
    if (dir[z]=='S')//判定方向 
    {
        for (int i=(y-1);i>=1;i--)//从这个点开始走,所有合法的点都搜一遍 
        {
        	if (!m[x][i])//不能前进就停止搜索 
        	{
        		continue;
			}
            dfs(x,i,(z+1));
        }
        return;
    }
    if (dir[z]=='N')
    {
        for (int i=(y+1);i<=r;i++)
        {
        	if (!m[x][i])
        	{
        		continue;
		    }
            dfs(x,i,(z+1));
        }
        return;
    }
    if (dir[z]=='E')
    {
        for (int i=(x+1);i<=c;i++)
        {
            if (!m[i][y])
        	{
        		continue;
			}
            dfs(i,y,(z+1));
        }
        return;
    }
    if (dir[z]=='W')
    {
        for (int i=(x-1);i>=1;i--)
        {
            if (!m[i][y])
        	{
        		continue;
			}
            dfs(i,y,(z+1));
        }
        return;
    }
}
int main()
{
    int startx,starty;
    string s;
    scanf("%d%d",&r,&c);
    for (int i=1;i<=60;i++)
    {
        for (int j=1;j<=60;j++)
        {
            m[i][j]=false;//初始化,防越界 
        }
    }
    for (int i=1;i<=r;i++)
    {
        for (int j=1;i<=c;i++)
        {
            scanf("%c",&state[i][j]);//读入地图 
            if (state[i][j]=='.')
            {
                m[i][j]=true;
            }
            if (state[i][j]=='*')
            {
                m[i][j]=true;
                startx=i;//确定开始位置 
                starty=j;
            }
        }
    }
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
    {
        cin>>s;//方向读入,直接读入首字母 
        dir[i]=s[0];
    }
    dfs(startx,starty,1);
    for (int i=1;i<=r;i++)
    {
        for (int j=1;j<=c;j++)
        {
            printf("%d",state[i][j]);//输出 
        }
        printf("\r\n");//换行 
    }
    return 0;
}
2023/9/27 22:33
加载中...