N*N的棋盤

N*N的棋盤

Time Limit:5s Memory Limit:1000k
Total Submit:3719 Accepted:1705
下載樣例程序(PE)
下載樣例程序(ELF)


Problem

在N*N的棋盤上(1<=N<=10)填入1,2,...N*N共N*N個數,使得任意兩個相鄰的數之和爲素數.

例如,當N=2時,有

1 2

4 3

Input

輸入第一行爲一整數T,表示有T組測試數據.

每組測試數據一行,爲一整數N(1<=N<=10)

Output

輸出滿足條件的最小序列的方案。

最小序列即將每一行連接起來組成一行,然後使前面的儘可能小,當第一個數字相同時則比較下面一個,依次類推。

比如當N=2時,序列爲1 2 4 3,當無滿足條件的方案時輸出"NO"。

Sample Input

1
2

Sample Output

1 2
4 3

My Solution

#include <stdio.h>
#include <memory.h>

int main(int argc, char* argv[])
{
    int pos[10 * 10];
    char isPrime[200];

    int N, count, i, j, N2;
    int curr_pos, curr_value, a, b;

    memset(isPrime, 1, sizeof(isPrime));
    isPrime[0] = isPrime[1] = 0;
    for(i = 2; i < sizeof(isPrime); i++){
        a = i + i;
        while(a < sizeof(isPrime)){
            isPrime[a] = 0;
            a += i;
        }
    }

    scanf("%d", &count);
    for(i = 0; i < count; i++){
        scanf("%d", &N);
        N2 = N * N;

        curr_pos = 0;   curr_value = 1;
        while(1){
            for(j = 0; j < curr_pos; j++){
                if(pos[j] == curr_value){
                    goto find_next;
                }
            }
            a = curr_pos / N;
            b = curr_pos % N;
            if(a > 0) if(!isPrime[pos[(a-1)*N+b] + curr_value]) goto find_next;
            if(b > 0) if(!isPrime[pos[curr_pos-1]+ curr_value]) goto find_next;
            pos[curr_pos] = curr_value;
            curr_pos ++;
            if(curr_pos >= N2){
                for(a = 0; a < N; a++){
                    for(b = 0; b < N; b++){
                        printf("%d ", pos[a*N+b]);
                    }
                    putchar('/n');
                }
                break;
            }
            curr_value = 1;
            continue;
find_next:
            curr_value++;
            if(curr_value > N2){
                curr_pos--;
                if(curr_pos < 0) puts("NO");
                curr_value = pos[curr_pos]+1;
            }
        }
    }

    return 0;
}

超時。。。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章