沾花把玖 2022-08-23 22:59 采纳率: 50%
浏览 31

可以解释一下我的代码的逻辑吗?

问题请见:https://wzoi.cc/s/1718/2197
可以解释一下我的代码中子程序f(1)的逻辑吗?最好文字说明:

#include<bits/stdc++.h>
#define maxn 1005
#define oo 200
using namespace std;
int n,m,t=0;
int rd[maxn]={0};
vector<int>g[maxn];
char a[maxn][maxn],c[maxn*2];
int sx[oo],sy[oo],lx[oo]={0},ly[oo]={0};
bool ok,vis[oo]={0},v[oo]={0},f[oo][oo]={0};

void f1(int x)
{
    if(x>t)
    {
        for(int i=1;i<x;i++) printf("%c",c[i]);
        printf("\n");
        return;
    }
    for(int i='A';i<='Z';i++) if(!rd[i]&&v[i])
    {
        c[x]=i;
        for(int k=0;k<g[i].size();k++) rd[g[i][k]]--;
        v[i]=false;
        f1(x+1);
        for(int k=0;k<g[i].size();k++) rd[g[i][k]]++;
        v[i]=true;
    }
}
int main()
{
    for(int i=0;i<oo;i++) sx[i]=sy[i]=oo;
    scanf("%d%d\n",&n,&m);
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
    {
        cin>>a[i][j];
        if(a[i][j]=='.') continue;
        vis[a[i][j]]=v[a[i][j]]=1;
        sx[a[i][j]]=min(sx[a[i][j]],i);
        sy[a[i][j]]=min(sy[a[i][j]],j);
        lx[a[i][j]]=max(lx[a[i][j]],i);
        ly[a[i][j]]=max(ly[a[i][j]],j);
    }
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++) if(vis[a[i][j]])
    {
        vis[a[i][j]]=0;
        t++;
        int k=a[i][j];
        for(int t=sy[k];t<=ly[k];t++) 
        if(a[sx[k]][t]!=k&&!f[k][a[sx[k]][t]])
        g[k].push_back(a[sx[k]][t]),rd[a[sx[k]][t]]++,f[k][a[sx[k]][t]]=1;

        for(int t=sy[k];t<=ly[k];t++)
        if(a[lx[k]][t]!=k&&!f[k][a[lx[k]][t]])
        g[k].push_back(a[lx[k]][t]),rd[a[lx[k]][t]]++,f[k][a[lx[k]][t]]=1;  

        for(int t=sx[k];t<=lx[k];t++)
        if(a[t][sy[k]]!=k&&!f[k][a[t][sy[k]]]) 
        g[k].push_back(a[t][sy[k]]),rd[a[t][sy[k]]]++,f[k][a[t][sy[k]]]=1;

        for(int t=sx[k];t<=lx[k];t++)
        if(a[t][ly[k]]!=k&&!f[k][a[t][ly[k]]]) 
        g[k].push_back(a[t][ly[k]]),rd[a[t][ly[k]]]++,f[k][a[t][ly[k]]]=1;
    }

    f1(1);
    return 0;
}
  • 写回答

1条回答 默认 最新

  • 雨下,听风 2022-08-24 06:59
    关注

    看不到题目啊

    评论

报告相同问题?

问题事件

  • 创建了问题 8月23日

悬赏问题

  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错
  • ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。