C++程序运行后出现Program received signal SIGSEGV,Segmentation fault
#include<cstdio>#include<cstring>intt,max,m,n,z,x,y;intso[10001][1001];intnum[10001],...
#include<cstdio>
#include<cstring>
int t,max,m,n,z,x,y;
int so[10001][1001];
int num[10001],a[10001],b[10001],c[10001],fa[10001];
void travel(int l){
for (int i=1;i<num[l];i++){
a[so[l][i]]=a[l]++;
travel(so[l][i]);
};
};
void travel1(int l){
c[l]=1;
if (l!=1 && c[fa[l]]==0){
a[fa[l]]=a[l]++;
b[fa[l]]=l;
travel1(fa[l]);
};
for (int i=1;i<num[l];i++)
if (c[so[l][i]]==0){
a[so[l][i]]=a[l]++;
b[so[l][i]]=l;
travel1(so[l][i]);
};
};
void travel2(int l){
if (z==(max--)/2){
printf("%d%c",l," ");
if (t==1) printf("%d",b[l]);
return;
};
z++;
travel2(b[l]);
};
int main(){
freopen("network.in","r",stdin);
freopen("network.out","w",stdout);
scanf("%d/n",n);
for (int i=2;i<n;i++){
scanf("%d",x);
num[x]++;
so[x][num[x]]=i;
fa[i]=x;
};
a[1]=0;
travel(1);
max=0;
for (int i=1;i<n;i++){
if (a[i]>max){
max=a[i];
y=i;
};
};
memset(a,0,sizeof(a));
a[y]=1;
c[y]=1;
b[y]=y;
travel1(y);
max=0;
for (int i=1;i<n;i++)
if (a[i]>max){
max=a[i];
y=i;
};
z=0;
if (max%2==1) t=0;
else t=1;
travel2(x);
return 0;
} 展开
#include<cstring>
int t,max,m,n,z,x,y;
int so[10001][1001];
int num[10001],a[10001],b[10001],c[10001],fa[10001];
void travel(int l){
for (int i=1;i<num[l];i++){
a[so[l][i]]=a[l]++;
travel(so[l][i]);
};
};
void travel1(int l){
c[l]=1;
if (l!=1 && c[fa[l]]==0){
a[fa[l]]=a[l]++;
b[fa[l]]=l;
travel1(fa[l]);
};
for (int i=1;i<num[l];i++)
if (c[so[l][i]]==0){
a[so[l][i]]=a[l]++;
b[so[l][i]]=l;
travel1(so[l][i]);
};
};
void travel2(int l){
if (z==(max--)/2){
printf("%d%c",l," ");
if (t==1) printf("%d",b[l]);
return;
};
z++;
travel2(b[l]);
};
int main(){
freopen("network.in","r",stdin);
freopen("network.out","w",stdout);
scanf("%d/n",n);
for (int i=2;i<n;i++){
scanf("%d",x);
num[x]++;
so[x][num[x]]=i;
fa[i]=x;
};
a[1]=0;
travel(1);
max=0;
for (int i=1;i<n;i++){
if (a[i]>max){
max=a[i];
y=i;
};
};
memset(a,0,sizeof(a));
a[y]=1;
c[y]=1;
b[y]=y;
travel1(y);
max=0;
for (int i=1;i<n;i++)
if (a[i]>max){
max=a[i];
y=i;
};
z=0;
if (max%2==1) t=0;
else t=1;
travel2(x);
return 0;
} 展开
3个回答
展开全部
#include<cstdio>
#include<cstring>
int t,max,m,n,z,x,y;
int so[10001][1001];
int num[10001],a[10001],b[10001],c[10001],fa[10001];
void travel(int l){
for (int i=1;i<num[l];i++){
a[so[l][i]]=a[l]++;
travel(so[l][i]);
};
};
void travel1(int l){
c[l]=1;
if (l!=1 && c[fa[l]]==0){
a[fa[l]]=a[l]++;
b[fa[l]]=l;
travel1(fa[l]);
};
for (int i=1;i<num[l];i++)
if (c[so[l][i]]==0){
a[so[l][i]]=a[l]++;
b[so[l][i]]=l;
travel1(so[l][i]);
};
};
void travel2(int l){
if (z==(max--)/2){
printf("%d%c",l," ");
if (t==1) printf("%d",b[l]);
return;
};
z++;
travel2(b[l]);
};
int main(){
int i;////
freopen("network.in","r",stdin);
freopen("network.out","w",stdout);
scanf("%d/n",&n);////&
for (i=2;i<n;i++){
scanf("%d",&x);////
num[x]++;
so[x][num[x]]=i;
fa[i]=x;
};
a[1]=0;
travel(1);
max=0;
for (i=1;i<n;i++){
if (a[i]>max){
max=a[i];
y=i;
};
};
memset(a,0,sizeof(a)*sizeof(int));//*sizeof(int)
a[y]=1;
c[y]=1;
b[y]=y;
travel1(y);
max=0;
for (i=1;i<n;i++)
if (a[i]>max)
{
max=a[i];
y=i;
}
z=0;
if (max%2==1) t=0;
else t=1;
travel2(x);
return 0;
}
逻辑没仔细看,修正了几处明显的语法错误,看带有注释的行。
追问
还是一样的貌似
追答
除了文件操作(即注释那两行,因为我这没文件,用屏幕输入),我这测试执行正常。
如果是文件操作的问题,那试试打开和写入使用"rb"和"wb"。
你的错误提示,问题应该集中在文件操作那里。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
freopen("network.in","r",stdin);
freopen("network.out","w",stdout);
network.in, network.out在项目文件夹下创建这两个空白文件, 或者去掉这两句
freopen("network.out","w",stdout);
network.in, network.out在项目文件夹下创建这两个空白文件, 或者去掉这两句
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询