ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1195. Крестики-нолики

WA #13
Послано tupica 20 фев 2008 03:04
I can't find my mistake...
Re: WA #13
Послано Astor 28 фев 2008 12:56
using System;
using System.Collections;

namespace граф_1
{

    class Class1
    {

        [STAThread]
        static void Main(string[] args)

            {
                //читаем
                int n = int.Parse(Console.ReadLine());
                int m = int.Parse(Console.ReadLine());
                int[,] graf = new int[n,n];
                for (int i = 0; i < n; i++)
                    for (int j = 0; j < n; j++)
                        graf[i, j] = 0;
                for (int i = 0; i < m; i++)
                {
                    string s = Console.ReadLine();
                    string[] s1 = s.Split(' ');
                    graf[int.Parse(s1[0]) - 1, int.Parse(s1[1]) - 1] = 1;
                    graf[int.Parse(s1[1]) - 1, int.Parse(s1[0]) - 1] = 1;
                }
                //Обходим все вершины
                int[] part = new int[n];
                Queue q = new Queue(n);
                bool[] discovered = new bool[n];
                for (int i = 0; i < n; i++)
                {
                    part[i] = 0;
                    discovered[i] = false;
                }
                part[0] = 1;
                bool b = true;
                //определяем, к какой доле они принадлежат
                q.Enqueue(0);
                discovered[0] = true;
                while(q.Count != 0)
                {
                    int v = (int) q.Dequeue();
                    for(int i = 0; i < n; i++)
                    {
                        if(graf[v,i] == 1)
                        {
                            if (!discovered[i])
                            {
                                discovered[i] = true;
                                q.Enqueue(i);
                            }
                            if (part[i] != part[v])
                                part[i] = -part[v];
                            else
                                b = false;
                        }
                    }
                    if (!b)
                        break;
                }
                if (b)
                {
                    for (int i = 0; i < n; i++)
                        if(part[i]==1)
                            Console.WriteLine(i+1);
                }
                else
                    Console.WriteLine(0);

            }
        }
    }