求助数组大小的问题
  • 板块P1305 新二叉树
  • 楼主霜羽
  • 当前回复8
  • 已保存回复8
  • 发布时间2020/10/29 23:22
  • 上次更新2023/11/5 09:32:52
查看原帖
求助数组大小的问题
235589
霜羽楼主2020/10/29 23:22
#include<cstdio>
#include<iostream>
using namespace std;
int a[500][2],b[500],c[500],n;

void read(){
    char ch[3];
    cin >> ch[0] >> ch[1] >> ch[2];
    int p = int(ch[0] - 'a' + 1);c[p] = 1;
    if(ch[1] != '*')a[p][0] = int(ch[1] - 'a' + 1);b[int(ch[1]-'a'+1)] = 1;
    if(ch[2] != '*')a[p][1] = int(ch[2] - 'a' + 1);b[int(ch[2]-'a'+1)] = 1;
    return;
}

void dfs(int p){
    if(p == 0)return;
    printf("%c",p+'a'-1);
    if(a[p][0])dfs(a[p][0]);
    if(a[p][1])dfs(a[p][1]);
    return;
}
int main(){
    cin >> n;
   for(int i = 1;i <= n;++i)read();
    for(int i = 1;i <= 30;++i)
        if(b[i] == 0 && c[i] == 1){
            dfs(i);
            break;
        }
    return 0;
}

上面的代码如果数组开到27会死循环,如果开到40会WAWA 6个点,如果开到500就能ACAC。请问这是什么原理?按理说拿字符减a后做下标不会超过26啊,希望帮忙解惑,感谢!

2020/10/29 23:22
加载中...