什么叫段错误????
  • 板块学术版
  • 楼主BoyuZhang
  • 当前回复12
  • 已保存回复12
  • 发布时间2023/10/4 19:24
  • 上次更新2023/11/2 15:43:26
查看原帖
什么叫段错误????
781722
BoyuZhang楼主2023/10/4 19:24

请教一下各位大佬,我的代码怎麼了???

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
struct ins{
    int len,a[250];
};
int n,m,k;
ins l[1000][1000];
ins add(ins x,ins y){
    ins sum;
    int r;
    for(int i=0;i<max(x.len,y.len);i++){
        sum.a[i]=(x.a[i]+y.a[i]+r)%10;
        r=(x.a[i]+y.a[i])/10;
        sum.len++;
    }
    if(r>0){
        sum.len++;
        sum.a[max(x.len,y.len)+1]=1;
    }
    return sum;
}
void init(){//预定义
    for(int i=0;i<m;i++){
        if(l[0][i].a[0]==-1) break;
        l[0][i].a[0]=1;//第一行定义
    }
    /*1 1 1
      0 -1 0
      0 0 0*/ 
    for(int i=0;i<n;i++){
        if(l[0][i].a[0]==-1) break;
        l[i][0].a[0]=1;//定义第一列
    }
    /*1 1 1
      1 -1 0
      1 0 0*/
}

int main(){
    freopen("c.in","r",stdin);
    freopen("c.out","w",stdout);
    int h,li;
    cin>>n>>m>>k;// 3 3 1
    for(int i=0;i<k;i++){
        cin>>h>>li; // 2 2
        l[h-1][li-1].a[0]=-1;//障碍物格子
        /*0 0 0
          0 -1 0
          0 0 0*/
    }  
    init();
    for(int i=1;i<n;i++){
        for(int j=1;j<m;j++){
            if(l[i][j].a[0]==-1) continue;
            if(l[i-1][j].a[0]==-1&&l[i][j-1].a[0]==-1) l[i][j].a[0]=0;//左侧和上侧均有障碍
            else if(l[i-1][j].a[0]!=-1&&l[i][j-1].a[0]!=-1) l[i][j]=add(l[i-1][j],l[i][j-1]);//均无障碍
            else if(l[i-1][j].a[0]==-1) l[i][j]=l[i][j-1];//只有一个障碍,上面的障碍
            else l[i][j]=l[i-1][j];//左面有障碍
        }
    }
    for(int i=l[n-1][m-1].len-1;i>=0;i--){
        cout<<l[n-1][m-1].a[i];
    }
    return 0;
}
2023/10/4 19:24
加载中...