#12974: 求指點


i610494 (wago)

學校 : 國立嘉義高級中學
編號 : 68247
來源 : [114.136.228.105]
最後登入時間 :
2021-11-13 12:57:44
d324. 00750 - 8 Queens Chess Problem -- UVa750 | From: [118.171.216.161] | 發表日期 : 2017-11-12 22:05

#include <math.h>
#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
void dfs(int );
int q[8] , T , x , y;
int main(int argc, char** argv) {
    int n , t;
    scanf("%d",&t);
    while(t--&&scanf("%d %d",&x,&y)) {
        printf("SOLN       COLUMN\n #      1 2 3 4 5 6 7 8\n\n");
        T=1; y--;
        dfs(0);
        printf("\n");
    }
    return 0;
}
 
void dfs(int d) {
    if(d==8) {
            printf(" %d     ",T++);
            for(int i=0;i<8;i++) printf(" %d",q[i]+1);
            printf("\n");
    }
    else if(d==x-1) {
        q[x-1]=y;
        for(int j=0;j<d;j++) if(q[j]==y||abs(d-j)==abs(y-q[j])) return ;
        dfs(d+1);
    }
    else {
        for(int i=0;i<8;i++) {
            q[d]=i; bool b=1;
            for(int j=0;j<d;j++) if(q[j]==i||abs(d-j)==abs(i-q[j])) {b=0; break;}
            if(b) dfs(d+1);
        }
    }
}
 
#12977: Re:求指點


justinO__o (夜貓)

學校 : 臺北市立成功高級中學
編號 : 51052
來源 : [61.216.80.115]
最後登入時間 :
2023-12-25 15:06:44
d324. 00750 - 8 Queens Chess Problem -- UVa750 | From: [49.218.38.3] | 發表日期 : 2017-11-13 15:59

#include
#include
#include
#include
using namespace std;
void dfs(int );
int q[8] , T , x , y;
int main(int argc, char** argv) {
    int n , t;
    scanf("%d",&t);
    while(t--&&scanf("%d %d",&x,&y)) {
        printf("SOLN       COLUMN\n #      1 2 3 4 5 6 7 8\n\n");
        T=1; y--;
        dfs(0);
        printf("\n");
    }
    return 0;
}
 
void dfs(int d) {
    if(d==8) {
            printf(" %d     ",T++);
            for(int i=0;i<8;i++) printf(" %d",q[i]+1);
            printf("\n");
    }
    else if(d==x-1) {
        q[x-1]=y;
        for(int j=0;j<d;j++) if(q[j]==y||abs(d-j)==abs(y-q[j])) return ;
        dfs(d+1);
    }
    else {
        for(int i=0;i<8;i++) {
            q[d]=i; bool b=1;
            for(int j=0;j<d;j++) if(q[j]==i||abs(d-j)==abs(i-q[j])) {b=0; break;}
            if(b) dfs(d+1);
        }
    }
}


是因為你只判了一條對角線嗎0u0?

 
#12978: Re:求指點


justinO__o (夜貓)

學校 : 臺北市立成功高級中學
編號 : 51052
來源 : [61.216.80.115]
最後登入時間 :
2023-12-25 15:06:44
d324. 00750 - 8 Queens Chess Problem -- UVa750 | From: [203.64.138.253] | 發表日期 : 2017-11-13 18:53

#include
#include
#include
#include
using namespace std;
void dfs(int );
int q[8] , T , x , y;
int main(int argc, char** argv) {
    int n , t;
    scanf("%d",&t);
    while(t--&&scanf("%d %d",&x,&y)) {
        printf("SOLN       COLUMN\n #      1 2 3 4 5 6 7 8\n\n");
        T=1; y--;
        dfs(0);
        printf("\n");
    }
    return 0;
}
 
void dfs(int d) {
    if(d==8) {
            printf(" %d     ",T++);
            for(int i=0;i<8;i++) printf(" %d",q[i]+1);
            printf("\n");
    }
    else if(d==x-1) {
        q[x-1]=y;
        for(int j=0;j<d;j++) if(q[j]==y||abs(d-j)==abs(y-q[j])) return ;
        dfs(d+1);
    }
    else {
        for(int i=0;i<8;i++) {
            q[d]=i; bool b=1;
            for(int j=0;j<d;j++) if(q[j]==i||abs(d-j)==abs(i-q[j])) {b=0; break;}
            if(b) dfs(d+1);
        }
    }
}



喔還有

他的x, y跟你的是反的

我剛剛也錯這 = =

所以你要scanf("%d%d", &y, &x) 之類的

 
#12979: Re:求指點


i610494 (wago)

學校 : 國立嘉義高級中學
編號 : 68247
來源 : [114.136.228.105]
最後登入時間 :
2021-11-13 12:57:44
d324. 00750 - 8 Queens Chess Problem -- UVa750 | From: [118.171.216.161] | 發表日期 : 2017-11-13 20:32


喔還有

他的x, y跟你的是反的

我剛剛也錯這 = =

所以你要scanf("%d%d", &y, &x) 之類的

感謝,我都沒注意到

 

 
ZeroJudge Forum