Informatika gyűjtemény

Egy szinttel feljebb dm_lefed.cs

2004050607080910

NézetNyomtat

dm_lefed.cs (Vissza)
Az alábbi letöltési lehetőségek közül választhatsz: (segítség)
Karakterkódolás:
Sortörés:
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: utf-8
Méret: 5 KB
using System;
using System.Collections.Generic;
using System.Text;

namespace legfedés
{
    class Program
    {
        public const int x = 8;
        public const int y = 8;
        public static int n;
        public static bool[,,] d;
        public static bool[,] now = new bool[x,y];
        public static int[] st = new int[* y / 4];
        public static bool[,] érintők;
        static void Main(string[] args)
        {
            Console.Write("initializing...");
            initialize();
            Console.Write("done\n");
            int next = 0;
            for (int lvl = 0; ; ) {
                Console.ReadKey(true);
                //if(now[])
                dump();
                //Console.WriteLine("{0}, {1}", lvl, st[lvl]);
                if (st[lvl] > n - 1)//back
                {
                    st[lvl] = 0;
                    lvl--;
                    if (lvl == -1) break;//elfogyott
                    unrak(st[lvl]);
                    st[lvl]++;
                    continue;
                }
                if (!fedi(st[lvl])&&érintők[next,st[lvl]])//berak
                {
                    if (lvl == st.Length-1)//kötött lépés, v van v nincs
                    {
                        dump();
                        break;

                    }
                    rak(st[lvl]);
                    next = köviüres();
                    lvl++;
                    if (lvl > 0) st[lvl] = 0;//0 ról kezdünk a másik okoskodás miatt
                    continue;
                }
                else {
                    st[lvl]++;
                }
            }
            Console.ReadKey(true);
               
        }
        static bool fedi(int n)
        {
            for (int i = 0; i < x; i++)
            {
                for (int k = 0; k < y; k++) if (d[n, i, k] && now[i, k]) return true;
            }
            return false;
        }
        static int köviüres()
        {
            for (int i = 0; i < x; i++)
            {
                for (int k = 0; k < y; k++) if (!now[i, k]) {
                    if ((* y + k) % x == x - 1) Console.WriteLine("volt");
                    return i * y + k;
                }
            }
            Console.WriteLine("Error");
            return 0;
        }
        static void rak(int n)
        {
            for (int i = 0; i < x; i++)
            {
                for (int k = 0; k < y; k++) if (d[n, i, k]) now[i,k] = true;
            }
        }
        static void unrak(int n)
        {
            for (int i = 0; i < x; i++)
            {
                for (int k = 0; k < y; k++) if (d[n, i, k]) now[i,k] = false;
            }
        }
        static void dump() {
            for (int i = 0; i < x; i++) {
                for(int k = 0 ;< y;k++){
                    if (now[i, k]) Console.Write("X");
                    else Console.Write("0");
                }
                Console.WriteLine();
            }
            Console.WriteLine();
            Console.WriteLine();
        }
        static void initialize()
        {
            n = ((- 1) * (- 2))*4 + ((- 2) * (- 1))*4;
            d = new bool[n, x,y];
            int ni = 0;

            for (int i = 0; i < (- 2); i++)
            {
                for (int k = 0; k < (- 1); k++)
                {
                    d[ni, i, k] = true;         //000
                    d[ni, i + 1, k] = true;     //0
                    d[ni, i + 2, k] = true;
                    d[ni, i, k + 1] = true;
                    ni++;
                    d[ni, i + 2, k] = true;     //  0
                    d[ni, i, k + 1] = true;     //000
                    d[ni, i + 1, k + 1] = true;
                    d[ni, i + 2, k + 1] = true;
                    ni++;
                    d[ni, i, k] = true;         //0 
                    d[ni, i, k + 1] = true;     //000
                    d[ni, i + 1, k + 1] = true;
                    d[ni, i + 2, k + 1] = true;
                    ni++;
                    d[ni, i, k] = true;         //000
                    d[ni, i + 1, k] = true;     //  0
                    d[ni, i + 2, k] = true;
                    d[ni, i + 2, k + 1] = true;
                    ni++;
                }

            }
            for (int i = 0; i < (- 1); i++)
            {
                for (int k = 0; k < (- 2); k++)
                {
                    d[ni, i, k] = true;         //00
                    d[ni, i + 1, k] = true;     //0
                    d[ni, i, k + 1] = true;     //0
                    d[ni, i, k + 2] = true;
                    ni++;
                    d[ni, i, k] = true;         //0
                    d[ni, i + 1, k + 2] = true; //0
                    d[ni, i, k + 1] = true;     //00
                    d[ni, i, k + 2] = true;
                    ni++;
                    d[ni, i + 1, k] = true;     // 0
                    d[ni, i + 1, k + 1] = true; // 0
                    d[ni, i + 1, k + 2] = true; //00
                    d[ni, i, k + 2] = true;
                    ni++;
                    d[ni, i + 1, k] = true;     //00
                    d[ni, i + 1, k + 1] = true; // 0
                    d[ni, i + 1, k + 2] = true; // 0
                    d[ni, i, k] = true;
                    ni++;
                }

            }
            érintők = new bool[y*x,ni];
            int num = x*y;
            for(int i = 0; i < num;i++){
                for(int j = 0;< ni;j++){
                    if(d[j,i/x,i%x])érintők[i,j] = true;
                }
            }
        }
    }
}
(Vissza)