File proveniente da Wikimedia Commons. Clicca per visitare la pagina originale

File:MAZE 30x20 Prim.ogv

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

MAZE_30x20_Prim.ogv(File video Ogg Theora, durata 1 min 0 s, 732 × 492 pixel, 154 kbps, dimensione file: 1,1 MB)

Logo di Commons
Logo di Commons
Questo file e la sua pagina di descrizione (discussione · modifica) si trovano su Wikimedia Commons (?)

Wikipedia

 Questa è una immagine in vetrina su Wikipedia in inglese (Featured pictures) dove è considerata una delle migliori immagini.
 Questa è una immagine in vetrina su Wikipedia in persiano (نگاره‌های برگزیده) dove è considerata una delle migliori immagini.

Se pensi che questo file debba essere in vetrina anche su Wikimedia Commons, sentiti libero di candidarlo.
Se hai un'immagine della stessa qualità che può essere pubblicata con almeno una licenza accettabile, caricala, usa il tag di copyright appropriato e candidala.

Dettagli

Descrizione
English: The generation of a maze using a randomized Prim's algorithm. This maze is 30x20 in size.
Data
Fonte Opera propria
Autore Purpy Pupple
Altre versioni
Using depth-first search instead of Prim's algorithm.

Source code

#include <iostream>
#include <queue>
#include <random>
#include <utility>
#include <vector>
#include <cstdio>

using namespace std;

const int xsize = 20;
const int ysize = 30;

int main() {
    random_device rd;
    mt19937 en(rd());
    uniform_real_distribution<double> uni(0,1);

    vector<int> v(xsize*ysize, 0);
    vector<int> w(xsize*ysize*2, 1);
    vector<vector<pair<double, pair<int, int>>>> e(xsize*ysize);

    for(int i=0; i<xsize; i++) {
        for(int j=0; j<ysize; j++) {
            int k = i*ysize + j;
            if(i>0) e[k].push_back(make_pair(uni(en), make_pair(k, (i-1)*ysize + j)));
            if(j>0) e[k].push_back(make_pair(uni(en), make_pair(k, i*ysize + (j-1))));
            if(i<xsize-1) e[k].push_back(make_pair(uni(en), make_pair(k, (i+1)*ysize + j)));
            if(j<ysize-1) e[k].push_back(make_pair(uni(en), make_pair(k, i*ysize + (j+1))));
        }
    }
    priority_queue <pair<double, pair<int, int>>> frontier;
    int x = 0, y = 0;
    v[x*ysize + y] = 1;
    for(auto k : e[0]) {
        frontier.push(k);
    }
    while(!frontier.empty()) {
        auto z = frontier.top();
        frontier.pop();
        int a = z.second.first;
        int b = z.second.second;
        if(v[b]) continue;
        v[b] = 2;
        int aa = min(a,b);
        int bb = max(a,b);
        if(bb-aa == 1) {
            w[2*aa] = 0;
        } else {
            w[2*aa+1] = 0;
        }
        for(auto k : e[b]) {
            if(!v[k.second.second]) {
                frontier.push(k);
            }
        }
        // print the thing lol
        for(int j=0; j<2*ysize+1; j++) {
            cout << "1 ";
        }
        for(int i=0; i<xsize; i++) {
            cout << endl << "1 ";
            for(int j=0; j<ysize; j++) {
                cout << "102"[v[i*ysize + j]] << " " << "01"[w[2*(i*ysize + j)]] << " ";
            }
            cout << endl << "1 ";
            for(int j=0; j<ysize; j++) {
                cout << "01"[w[2*(i*ysize + j)+1]] << " 1 ";
            }
        }
        cout << endl;
        v[b] = 1;
    }
}

Licenza

Io, detentore del copyright su quest'opera, dichiaro di pubblicarla con le seguenti licenze:
w:it:Creative Commons
attribuzione condividi allo stesso modo
Questo file è disponibile in base alla licenza Creative Commons Attribuzione-Condividi allo stesso modo 3.0 Unported
Tu sei libero:
  • di condividere – di copiare, distribuire e trasmettere quest'opera
  • di modificare – di adattare l'opera
Alle seguenti condizioni:
  • attribuzione – Devi fornire i crediti appropriati, un collegamento alla licenza e indicare se sono state apportate modifiche. Puoi farlo in qualsiasi modo ragionevole, ma non in alcun modo che suggerisca che il licenziante approvi te o il tuo uso.
  • condividi allo stesso modo – Se remixi, trasformi o sviluppi il materiale, devi distribuire i tuoi contributi in base alla stessa licenza o compatibile all'originale.
GNU head È permesso copiare, distribuire e/o modificare questo documento in base ai termini della GNU Free Documentation License, Versione 1.2 o successive pubblicata dalla Free Software Foundation; senza alcuna sezione non modificabile, senza testo di copertina e senza testo di quarta di copertina. Una copia della licenza è inclusa nella sezione intitolata Testo della GNU Free Documentation License.
Puoi scegliere la licenza che preferisci.

Didascalie

Aggiungi una brevissima spiegazione di ciò che questo file rappresenta
The generation of a maze using a randomized Prim's algorithm. This maze is 30x20 in size.

Elementi ritratti in questo file

raffigura

application/ogg

Cronologia del file

Fare clic su un gruppo data/ora per vedere il file come si presentava nel momento indicato.

Data/OraMiniaturaDimensioniUtenteCommento
attuale00:13, 12 giu 20151 min 0 s, 732 × 492 (1,1 MB)DlluFixes a bug that caused it to be not actually Prim's algorithm.
03:46, 6 feb 20111 min 1 s, 732 × 492 (563 KB)Dllu{{Information |Description ={{en|1=The generation of a maze using a randomized Prim's algorithm. This maze is 30x20 in size. The C++ source code used to create this can be seen at w:User:Purpy Pupple/Maze.}} |Source

La seguente pagina usa questo file:

Utilizzo globale del file

Anche i seguenti wiki usano questo file:

Metadati