#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会WA 6个点,如果开到500就能AC。请问这是什么原理?按理说拿字符减a后做下标不会超过26啊,希望帮忙解惑,感谢!