求解答一个c语言代码问题

2025-05-06 07:06:47
推荐回答(2个)
回答1:

答案是: 12

16  3  2 13

5 10 11  8

9  6  7 12

4 15 14  1

C 代码:

#include 
#include 
int check(int**chess,int row,int col){
    int sum=0,t,r;
    for(int i=0;i        sum+=chess[i][0];
    }
    t=0;
    for(int i=0;i        t+=chess[i][i];
    }
    if(t!=sum) return 0;
    t=0;
    for(int i=col-1;i>=0;i--){
        t+=chess[abs(i-col+1)%col][i];
    }
    if(t!=sum) return 0;

    for(int i=0;i        t=0;
        for(int j=0;j            t+=chess[j][i];
        }
        if(sum!=t) return 0;
    }
    for(int i=0;i        t=0;
        for(int j=0;j            t+=chess[i][j];
        }
        if(sum!=t) return 0;
    }

    return 1;

}
int doChess(int **chess,int row,int col,int x,int y){
    if(y>=col){
        y=0;
        x++;
        if(x>=row){
            return check(chess,row,col);
        }
        return doChess(chess,row,col,x,y);
    }else{
        if(chess[x][y]){
            y++;
            return doChess(chess,row,col,x,y);
        }else{
            int* vs=(int *)malloc(sizeof(int)*(row*col));
            int len=0;
            for(int i=0;i                for(int j=0;j                    if(chess[i][j])vs[len++]=chess[i][j];
                }
            }
            if(len==row*col)
                return check(chess,row,col);
            int flag=0;
            for(int i=1;i<=row*col;i++){
                flag=1;
                for (int j=0;j                    if(vs[j]==i){
                        flag=0;
                        break;
                    }
                }
                if(flag){
                    chess[x][y]=i;
                    if(doChess(chess,row,col,x,y+1))
                        return 1;
                }
            }
            chess[x][y]=0;
            return 0;
        }
    }
}
int main(void){
    int **chess;
    int row,col;
    scanf("%d %d",&row,&col);
    chess=(int**)(malloc(sizeof(int *)*row));
    for(int i=0;i        chess[i]=(int*)malloc(sizeof(int)*col);
        for(int j=0;j            scanf("%d",chess[i]+j);
        }
    }

        for(int i=0;i            for(int j=0;j                printf("%3d",chess[i][j]);
            }
            printf("\n");
        }
    int r=doChess(chess,row,col,0,0);
    if(r){

        for(int i=0;i            for(int j=0;j                printf("%3d",chess[i][j]);
            }
            printf("\n");
        }
    }
    return 0;
}

回答2:

? 前八十回