Submission #1304999


Source Code Expand

using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;

public class Hello
{

    public static void Main()
    {
        char[][] board = new char[8][];

        for(int i = 0; i < 8; i++)
        {
            board[i] = Console.ReadLine().ToCharArray();
        }

        if(DFS(0, 8, board))
        {
            for(int i = 0; i < 8; i++)
            {
                for(int j = 0; j < 8; j++)
                {
                    Console.Write(board[i][j]);
                }
                Console.WriteLine();
            }
        }
        else
        {
            Console.WriteLine("No Answer");
        }

        


        Console.ReadKey();
    }

    public static bool DFS(int current, int remains, char[][] board)
    {
        if (remains == 0) return true; // もし、8個全て置けたのであれば、true 
        if (current == 64) return false;  // もし、(上の式を満たすこと無く)全てのマスを探索したのであれば false

        // マス目の番号 current を座標に変換する。
        int y = current / 8;
        int x = current % 8;

        if(board[y][x] == 'Q') // 入力によって与えられたQの妥当性を検証する。
        {
            if(isPuttable(y, x, board)) // 与えられた位置のQが妥当であるか?
            {
                // 問題ないのであれば、そのまま探索を続ける。
                if (DFS(current + 1, remains - 1, board)) return true;
            }
        }
        else
        {
            // 現在の場所にQを置けるか?
            if(isPuttable(y, x, board))
            {
                // 置けるなら、Qを置き、そのまま探索を続ける。
                board[y][x] = 'Q';
                if (DFS(current + 1, remains - 1, board)) return true;
                board[y][x] = '.';
            }
            if (DFS(current + 1, remains, board)) return true;
        }
        return false;
    }

    public static bool isInside(int y, int x)
    {
        return x >= 0 && y >= 0 && x < 8 && y < 8;
    }

    public static bool isPuttable(int y, int x, char[][] board)
    {
        /*
         * 八方向全てを調べる。
         * vy が -1 vx が -1 時は、左斜めに vy が 0 vx が -1 の時は左へ
         * vy , vx が共に 0 の時は探索できないのでスキップする
         * vy が、0 vx が 1 の時は、右へ探索
         * というように、以下の処理で八方向全てを探索しきることができる。
         * 終了条件は、マス目をはみ出した時、すなわち、yが -1 or 8 x が -1 or 8の時
         */
        for (int vy = -1; vy <= 1; vy++)
        {
            for(int vx = -1; vx <= 1; vx++)
            {
                if (vy == 0 && vx == 0) continue;
                int ty = y; int tx = x;
                while(true)
                {
                    ty += vy; tx += vx;
                    if (!isInside(ty, tx)) break;
                    if (board[ty][tx] == 'Q') return false;
                }
            }
        }
        return true;
    }
}

Submission Info

Submission Time
Task C - パズルのお手伝い
User TadokoroKoji
Language C# (Mono 4.6.2.0)
Score 100
Code Size 3265 Byte
Status AC
Exec Time 23 ms
Memory 13268 KB

Judge Result

Set Name All
Score / Max Score 100 / 100
Status
AC × 42
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 AC 23 ms 11220 KB
00_sample2.txt AC 20 ms 9172 KB
01_rnd_00.txt AC 21 ms 9172 KB
01_rnd_01.txt AC 21 ms 11220 KB
01_rnd_02.txt AC 21 ms 11220 KB
01_rnd_03.txt AC 21 ms 11220 KB
01_rnd_04.txt AC 20 ms 9172 KB
01_rnd_05.txt AC 21 ms 11220 KB
01_rnd_06.txt AC 21 ms 9172 KB
01_rnd_07.txt AC 21 ms 11220 KB
01_rnd_08.txt AC 20 ms 9172 KB
01_rnd_09.txt AC 20 ms 11220 KB
01_rnd_10.txt AC 20 ms 9172 KB
01_rnd_11.txt AC 20 ms 9172 KB
01_rnd_12.txt AC 20 ms 9172 KB
01_rnd_13.txt AC 21 ms 11220 KB
01_rnd_14.txt AC 20 ms 9172 KB
01_rnd_15.txt AC 21 ms 11220 KB
01_rnd_16.txt AC 20 ms 9172 KB
01_rnd_17.txt AC 20 ms 9172 KB
01_rnd_18.txt AC 21 ms 13268 KB
01_rnd_19.txt AC 21 ms 11220 KB
01_rnd_20.txt AC 20 ms 9172 KB
01_rnd_21.txt AC 20 ms 11220 KB
01_rnd_22.txt AC 20 ms 11220 KB
01_rnd_23.txt AC 20 ms 9172 KB
01_rnd_24.txt AC 20 ms 9172 KB
01_rnd_25.txt AC 20 ms 9172 KB
01_rnd_26.txt AC 20 ms 9172 KB
01_rnd_27.txt AC 21 ms 11220 KB
01_rnd_28.txt AC 20 ms 9172 KB
01_rnd_29.txt AC 21 ms 11220 KB
01_rnd_30.txt AC 21 ms 13268 KB
01_rnd_31.txt AC 20 ms 9172 KB
01_rnd_32.txt AC 21 ms 9172 KB
01_rnd_33.txt AC 20 ms 11220 KB
01_rnd_34.txt AC 20 ms 9172 KB
01_rnd_35.txt AC 21 ms 11220 KB
01_rnd_36.txt AC 20 ms 11220 KB
01_rnd_37.txt AC 20 ms 9172 KB
01_rnd_38.txt AC 20 ms 9172 KB
01_rnd_39.txt AC 20 ms 9172 KB