Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #include <ConsoleColor.h>
- #include <stdio.h>
- #define V 2476
- #define INFINITO 10000
- #define peso_aresta 1
- using namespace std;
- int tam_grafo=0;
- vector < int > grafo[2476];
- char codigos_ascii[15] = {'>', '^', 200, '<', 205, 188, 202, 'v', 201, 186, 204, 187, 203, 185, 206};
- bool cores[2476];
- int predecessor[2476];
- pair < int, int > labirinto[46][56];
- int dijkstra(int orig, int dest){
- int dist[tam_grafo];
- int visitados[tam_grafo];
- priority_queue < pair<int, int>,
- vector<pair<int, int> >, greater<pair<int, int> > > pq;
- for(int i = 0; i < tam_grafo; i++)
- {
- dist[i] = INFINITO;
- visitados[i] = false;
- }
- dist[orig] = 0;
- pq.push(make_pair(dist[orig], orig));
- while(!pq.empty())
- {
- pair<int, int> p = pq.top();
- int u = p.second;
- pq.pop();
- if(visitados[u] == false)
- {
- visitados[u] = true;
- //vector< int >::iterator it;
- for(int cont=0; cont < tam_grafo; cont++)
- {
- int v = cont;
- if(dist[v] >= (dist[u] + peso_aresta))
- {
- dist[v] = dist[u] + peso_aresta;
- pq.push(make_pair(dist[v], v));
- predecessor[v] = u;
- }
- }
- }
- }
- return dist[dest];
- }
- void montarAdj(int lin, int col)
- {
- int x = labirinto[lin][col].first;
- switch(x)
- {
- case 1:
- grafo[labirinto[lin][col].second].push_back(labirinto[lin][col+1].second);
- break;
- case 2:
- grafo[labirinto[lin][col].second].push_back(labirinto[lin-1][col].second);
- break;
- case 3:
- grafo[labirinto[lin][col].second].push_back(labirinto[lin][col+1].second);
- grafo[labirinto[lin][col].second].push_back(labirinto[lin-1][col].second);
- break;
- case 4:
- grafo[labirinto[lin][col].second].push_back(labirinto[lin][col-1].second);
- break;
- case 5:
- grafo[labirinto[lin][col].second].push_back(labirinto[lin][col+1].second);
- grafo[labirinto[lin][col].second].push_back(labirinto[lin][col-1].second);
- break;
- case 6:
- grafo[labirinto[lin][col].second].push_back(labirinto[lin-1][col].second);
- grafo[labirinto[lin][col].second].push_back(labirinto[lin][col-1].second);
- break;
- case 7:
- grafo[labirinto[lin][col].second].push_back(labirinto[lin][col+1].second);
- grafo[labirinto[lin][col].second].push_back(labirinto[lin-1][col].second);
- grafo[labirinto[lin][col].second].push_back(labirinto[lin][col-1].second);
- break;
- case 8:
- grafo[labirinto[lin][col].second].push_back(labirinto[lin+1][col].second);
- break;
- case 9:
- grafo[labirinto[lin][col].second].push_back(labirinto[lin][col+1].second);
- grafo[labirinto[lin][col].second].push_back(labirinto[lin+1][col].second);
- break;
- case 10:
- grafo[labirinto[lin][col].second].push_back(labirinto[lin-1][col].second);
- grafo[labirinto[lin][col].second].push_back(labirinto[lin+1][col].second);
- break;
- case 11:
- grafo[labirinto[lin][col].second].push_back(labirinto[lin][col+1].second);
- grafo[labirinto[lin][col].second].push_back(labirinto[lin-1][col].second);
- grafo[labirinto[lin][col].second].push_back(labirinto[lin+1][col].second);
- break;
- case 12:
- grafo[labirinto[lin][col].second].push_back(labirinto[lin][col-1].second);
- grafo[labirinto[lin][col].second].push_back(labirinto[lin+1][col].second);
- break;
- case 13:
- grafo[labirinto[lin][col].second].push_back(labirinto[lin][col+1].second);
- grafo[labirinto[lin][col].second].push_back(labirinto[lin][col-1].second);
- grafo[labirinto[lin][col].second].push_back(labirinto[lin+1][col].second);
- break;
- case 14:
- grafo[labirinto[lin][col].second].push_back(labirinto[lin-1][col].second);
- grafo[labirinto[lin][col].second].push_back(labirinto[lin][col-1].second);
- grafo[labirinto[lin][col].second].push_back(labirinto[lin+1][col].second);
- break;
- case 15:
- grafo[labirinto[lin][col].second].push_back(labirinto[lin][col+1].second);
- grafo[labirinto[lin][col].second].push_back(labirinto[lin-1][col].second);
- grafo[labirinto[lin][col].second].push_back(labirinto[lin][col-1].second);
- grafo[labirinto[lin][col].second].push_back(labirinto[lin+1][col].second);
- break;
- }
- }
- int main()
- {
- int cnt=1, vertices[100], cont=0;
- for(int i=0; i<45; i++)
- {
- for(int j=0; j<55; j++)
- {
- labirinto[i][j].first = 0;
- }
- }
- FILE *arq;
- int i, j, valor, maiori=0, maiorj=0;
- char lixo;
- arq = fopen("normal5.lab.txt", "r");
- if (arq == NULL)
- {
- cout<<"erro"<<endl;
- }
- else lixo = fscanf(arq, "%s %d %d %d", &lixo, &j, &i, &valor);
- while(lixo != EOF)
- {
- lixo = fscanf(arq, "%s %d %d %d", &lixo, &j, &i, &valor);
- labirinto[i][j].first = valor;
- if(valor ==16 || valor ==30 || valor ==17 || valor ==31 ){
- vertices[cont] = j*i;
- cont++;
- }
- // cout << j <<" " << i << " " << valor << endl;
- if(i>maiori) maiori=i;
- if(j>maiorj) maiorj=j;
- }
- fclose(arq);
- tam_grafo= maiori*maiorj;
- for(int i=0; i<45; i++)
- {
- for(int j=0; j<55; j++)
- {
- montarAdj(i, j);
- }
- }
- for(int i=0; i<maiori; i++)
- {
- for(int j=0; j<maiorj; j++)
- {
- labirinto[i][j].second = cnt;
- cnt++;
- }
- }
- memset(predecessor, 0, sizeof(predecessor));
- //dijkstra(56, 90);
- int x = 90;
- memset(cores, false, sizeof cores);
- while(predecessor[x] != 0)
- {
- cores[x] = true;
- x = predecessor[x];
- }
- for(int i=0; i<45; i++)
- {
- for(int j=0; j<55; j++)
- {
- if(cores[labirinto[i][j].second])
- {
- cout << green << codigos_ascii[labirinto[i][j].first-1];
- }
- else if(labirinto[i][j].first!=0){
- //cout << white << codigos_ascii[labirinto[i][j].first-1];
- if(labirinto[i][j].first == 1 || labirinto[i][j].first == 2 || labirinto[i][j].first == 4 || labirinto[i][j].first== 8 )
- {
- cout << red << codigos_ascii[labirinto[i][j].first-1];
- // cout << blue << labirinto[i][j].second;
- }
- else {
- cout << white << codigos_ascii[labirinto[i][j].first-1];
- }
- }
- else
- cout << " ";
- }
- cout << endl;
- }
- cout<< "o tamanho do grafo é : "<<tam_grafo;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement