Submission #22186


Source Code Expand

<?php

    $board = array();
    main();
    
    function main(){
        for($i = 0; $i < 8; $i++){
            fscanf(STDIN, "%s", $line);
            $board[] = str_split($line);
        }

        // 初期状態チェック
        for($i = 0; $i < 8; $i++){
            for($j = 0; $j < 8; $j++){
                if($board[$i][$j] == 'Q'){
                    if(check($board, $i, $j) == 0){
                        echo "No Answer\n";
                        exit();
                    }
                }
            }
        }
        
        if(solve($board, 0)){
            for($i = 0; $i < 8; $i++){
                for($j = 0; $j < 8; $j++){
                    echo $board[$i][$j];
                }
                echo "\n";
            }
        } else {
            echo "No Answer\n";
        }
        exit();
    }

    function check($board, $x, $y){
        for($m = 0; $m < 8; $m++){
            // 横方向をチェック
            if($board[$m][$y] == 'Q' && $m != $x){
                return 0;
            }
            // 縦方向をチェック
            if($board[$x][$m] == 'Q' && $m != $y){
                return 0;
            }
        }

        // 左上方向をチェック
        $m = $x; $n = $y;
        while($m > 0 && $n > 0){
            if($board[--$m][--$n] == 'Q'){
                return 0;
            }
        }
        
        // 右下方向をチェック
        $m = $x; $n = $y;
        while($m < 7 && $n < 7){
            if($board[++$m][++$n] == 'Q'){
                return 0;
            }
        }
        
        // 右上方向をチェック
        $m = $x; $n = $y;
        while($m > 0 && $n < 7){
            if($board[--$m][++$n] == 'Q'){
                return 0;
            }
        }

        // 左下方向をチェック
        $m = $x; $n = $y;
        while($m < 7 && $n > 0){
            if($board[++$m][--$n] == 'Q'){
                return 0;
            }
        }

        return 1;
    }
    
    function solve($board, $x){

        // 再帰終了条件:ボードすべてに置くことができたら終了
        if($x == 8){
            return 1;
        }
        // x行i列の要素にクイーンが置けるかどうかチェックし、置けるなら置く
        for($i = 0; $i < 8; $i++){
            // 既に置いてあったら次の行へ
            if($board[$x][$i] == 'Q'){
                if(solve($board, $x + 1)){
                        return 1;
                }
            } else {
                if(check($board, $x, $i)){
                    $board[$x][$i] = 'Q';
                    // 再帰で次の行が置けるかどうかを求める
                    if(solve($board, $x + 1)){
                        return 1;
                    }
                    // 置けなかったら置いた場所を元に戻し、ループで異なるi列目に置き直す
                    $board[$x][$i] = '.';
                }
            }
        }

        return 0;

    }
    
?>

Submission Info

Submission Time
Task C - パズルのお手伝い
User wada811
Language PHP (PHP 5.3.10)
Score 0
Code Size 3141 Byte
Status WA
Exec Time 32 ms
Memory 3580 KB

Judge Result

Set Name All
Score / Max Score 0 / 100
Status
AC × 34
WA × 8
Set Name Test Cases
All 00_sample1.txt, 00_sample2.txt, 01_rnd_00.txt, 01_rnd_01.txt, 01_rnd_02.txt, 01_rnd_03.txt, 01_rnd_04.txt, 01_rnd_05.txt, 01_rnd_06.txt, 01_rnd_07.txt, 01_rnd_08.txt, 01_rnd_09.txt, 01_rnd_10.txt, 01_rnd_11.txt, 01_rnd_12.txt, 01_rnd_13.txt, 01_rnd_14.txt, 01_rnd_15.txt, 01_rnd_16.txt, 01_rnd_17.txt, 01_rnd_18.txt, 01_rnd_19.txt, 01_rnd_20.txt, 01_rnd_21.txt, 01_rnd_22.txt, 01_rnd_23.txt, 01_rnd_24.txt, 01_rnd_25.txt, 01_rnd_26.txt, 01_rnd_27.txt, 01_rnd_28.txt, 01_rnd_29.txt, 01_rnd_30.txt, 01_rnd_31.txt, 01_rnd_32.txt, 01_rnd_33.txt, 01_rnd_34.txt, 01_rnd_35.txt, 01_rnd_36.txt, 01_rnd_37.txt, 01_rnd_38.txt, 01_rnd_39.txt
Case Name Status Exec Time Memory
00_sample1.txt WA 31 ms 128 KB
00_sample2.txt AC 29 ms 0 KB
01_rnd_00.txt AC 32 ms 3428 KB
01_rnd_01.txt WA 31 ms 0 KB
01_rnd_02.txt AC 29 ms 3504 KB
01_rnd_03.txt AC 31 ms 128 KB
01_rnd_04.txt AC 29 ms 0 KB
01_rnd_05.txt AC 31 ms 3380 KB
01_rnd_06.txt AC 29 ms 0 KB
01_rnd_07.txt AC 29 ms 3500 KB
01_rnd_08.txt AC 29 ms 0 KB
01_rnd_09.txt AC 29 ms 0 KB
01_rnd_10.txt AC 29 ms 0 KB
01_rnd_11.txt AC 29 ms 3376 KB
01_rnd_12.txt AC 29 ms 0 KB
01_rnd_13.txt WA 29 ms 0 KB
01_rnd_14.txt AC 29 ms 0 KB
01_rnd_15.txt AC 29 ms 3436 KB
01_rnd_16.txt AC 29 ms 3440 KB
01_rnd_17.txt AC 29 ms 0 KB
01_rnd_18.txt WA 31 ms 3452 KB
01_rnd_19.txt WA 29 ms 0 KB
01_rnd_20.txt AC 29 ms 3368 KB
01_rnd_21.txt AC 29 ms 0 KB
01_rnd_22.txt AC 29 ms 3444 KB
01_rnd_23.txt AC 29 ms 0 KB
01_rnd_24.txt AC 29 ms 3436 KB
01_rnd_25.txt WA 31 ms 3492 KB
01_rnd_26.txt AC 29 ms 0 KB
01_rnd_27.txt WA 31 ms 0 KB
01_rnd_28.txt AC 29 ms 0 KB
01_rnd_29.txt AC 29 ms 0 KB
01_rnd_30.txt AC 29 ms 3504 KB
01_rnd_31.txt AC 25 ms 0 KB
01_rnd_32.txt WA 31 ms 3496 KB
01_rnd_33.txt AC 29 ms 0 KB
01_rnd_34.txt AC 29 ms 3376 KB
01_rnd_35.txt AC 29 ms 3580 KB
01_rnd_36.txt AC 29 ms 0 KB
01_rnd_37.txt AC 29 ms 3440 KB
01_rnd_38.txt AC 31 ms 0 KB
01_rnd_39.txt AC 31 ms 0 KB