P1101求调...
  • 板块学术版
  • 楼主__Cow__
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/8/4 14:05
  • 上次更新2023/10/27 17:04:37
查看原帖
P1101求调...
589272
__Cow__楼主2022/8/4 14:05

写了一上午八十几行。。。结果最后一个点WA了那数据根本没法调啊

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <string>
using namespace std;
bool flag = true,flag1=false;
char a[1000][1000],k[10]={' ','y','i','z','h','o','n','g'};
int v[1000][1000],n,k1[10][2]={{0,0},{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}},f[1000][2];
int h[1000][1000];
int g=1;
void dfst (int x,int y,int s,int d)
{
    if (a[x][y]!=k[s]||h[x][y]==1)
    {
        flag = false;
        h[x][y] = 0;
        return;
    }
    v[x][y] = 1;
    h[x][y] = 1;
    int x1 = x+k1[d][0];
    int y1 = y+k1[d][1];
    v[x1][y1] = 1;
    if (s==7)
    {
        v[x][y] = 0;
        return;
    }
    dfst(x1,y1,s+1,d);
    if (flag==false) h[x][y] = 0;
    v[x][y] = 0;
}
void dfs(int x,int y,int s)
{
    if (a[x][y]!='y') return;
    v[x][y] = 1;
    h[x][y] = 1;
    for (int i=1;i<=8;i++)
    {
        int x1 = x+k1[i][0];
        int y1 = y+k1[i][1];
        if (a[x1][y1]==k[s+1]&&v[x1][y1]==0&&x1<=n&&y1<=n&&x1>0&&y1>0&&h[x1][y1]==0)
        {
            v[x1][y1] = 1;
            dfst(x1,y1,s+1,i);
            v[x1][y1] = 0;
            if (flag==true)
            {
                flag1=true;
                break;
            }
            else
            {
                flag = true;
            }
        }
    }
    v[x][y] = 0;
    if (flag==false||flag1==false) h[x][y] = 0;
}
int main()
{
    scanf ("%d", &n);
    for (int i=1;i<=n;i++)
    {
        for (int j=1;j<=n;j++)
        {
            cin>>a[i][j];
            if (a[i][j]=='y')
            {
                f[g][0] = i;
                f[g][1] = j;
                g+=1;
            }
        }
    }
    for (int i=1;i<=g-1;i++)
    {
        dfs(f[i][0],f[i][1],1);
        flag = true;
        flag1 = false;
    }
    for (int i=1;i<=n;i++)
    {
        for (int j=1;j<=n;j++)
        {
            if (h[i][j]==1) printf ("%c", a[i][j]);
            else printf ("*");
        }
        printf ("\n");
    }
    return 0;
}
2022/8/4 14:05
加载中...