最后一个点T了,求优化思路
查看原帖
最后一个点T了,求优化思路
567702
criss39楼主2022/1/10 22:29
#include<stdio.h>
#include<string.h>
int n;
int result[15]={0};
long int count=0;
void diag(int a,int step,int i,int map[][15]){
    int j,k;
    map[step][i] += a;
    j = step;
    k = i;
    while (j!=0 && k!=0){
        j -= 1;
        k -= 1;
        map[j][k] += a;
    }
    j = step;
    k = i;
    while (j!=(n-1) && k!=0){
        j += 1;
        k -= 1;
        map[j][k] += a;
    }
    j = step;
    k = i;
    while (j!=(n-1) && k!=(n-1)){
        j += 1;
        k += 1;
        map[j][k] += a;
    }
    j = step;
    k = i;
    while (j!=0 && k!=(n-1)){
        j -= 1;
        k += 1;
        map[j][k] += a;
    }
    for (j=0;j<n;j++){
        map[step][j] += a;
        map[j][i] += a;
    }
    return;
}
void dfs(int step,int map[][15]){
    int i;
    if (step==n){
        count += 1;
        if (count <= 3){
            for (i=0;i<n;i++){
                printf("%d ",result[i]);
            }
            printf("\n");
        }
        return;
    }
    int j,k=0;
    int flag = 0;
    for (i=0;i<n;i++){
        if (map[step][i]==0){
            flag = 1;
            diag(1,step,i,map);
            result[step] = i+1;
            dfs(step+1,map);
            diag(-1,step,i,map);
            result[step] = 0;
        }
    }
    if (!flag){
        return;
    }
}
int main(){
    int map[15][15]={0};
    scanf("%d",&n);
    dfs(0,map);
    printf("%ld",count);
    return 0;
}

最后一个点T了,求优化思路!谢谢各位

2022/1/10 22:29
加载中...