Jump to content
whoami-r

Converter um ficheiro clq para txt em C

Recommended Posts

whoami-r

Boas pessoal, sei que o tópico que vou criar pode não ser muito bem explícito mas vou tentar explicar da melhor maneira o que tenho em mente para fazer, e gostava que me pudessem ajudar.

Eu tenho um ficheiro que é apresentado desta forma:

c FILE: MANN_a9.clq.b		// linhas começadas com c são apenas comentários
c
c By: Carlo Mannino
c
p edge 45 918			// indica que é um grafo com 45 vertices e 918 linhas
e 2 1					// aresta que liga os vertices 1 e 2
e 3 1					// aresta que liga os vertices 1 e 3
e 3 2					// ...
e 4 1
e 4 2
...
e 45 39
e 45 40
e 45 41
e 45 42 				// ultima aresta que une 42 e 45

E depois tenho outro em txt deste genero

100

20

0	1	0	1	0	0	0	1	0	0	0	0	1	1	0	1	0	0	1	0	
1	0	0	1	1	0	1	0	0	1	0	0	1	0	1	0	1	0	0	1	
0	0	0	1	0	0	0	1	0	0	1	0	1	1	0	0	0	1	0	0	
1	1	1	0	0	0	0	1	1	1	0	1	0	0	0	1	1	0	0	1	
0	1	0	0	0	0	0	0	1	0	0	1	0	0	1	1	0	1	0	1	
0	0	0	0	0	0	0	0	0	1	0	0	0	1	0	0	0	1	1	0	
0	1	0	0	0	0	0	1	0	1	0	0	0	0	0	1	0	1	1	1	
1	0	1	1	0	0	1	0	1	1	0	0	0	1	0	0	0	0	0	1	
0	0	0	1	1	0	0	1	0	0	0	1	0	0	0	0	1	0	0	0	
0	1	0	1	0	1	1	1	0	0	1	0	1	0	0	0	0	0	0	0	
0	0	1	0	0	0	0	0	0	1	0	0	0	1	0	0	0	0	1	0	
0	0	0	1	1	0	0	0	1	0	0	0	1	1	1	0	0	0	0	0	
1	1	1	0	0	0	0	0	0	1	0	1	0	0	0	0	1	1	0	0	
1	0	1	0	0	1	0	1	0	0	1	1	0	0	0	0	1	0	0	0	
0	1	0	0	1	0	0	0	0	0	0	1	0	0	0	0	1	0	1	0	
1	0	0	1	1	0	1	0	0	0	0	0	0	0	0	0	0	0	1	0	
0	1	0	1	0	0	0	0	1	0	0	0	1	1	1	0	0	0	0	0	
0	0	1	0	1	1	1	0	0	0	0	0	1	0	0	0	0	0	1	0	
1	0	0	0	0	1	1	0	0	0	1	0	0	0	1	1	0	1	0	1	
0	1	0	1	1	0	1	1	0	0	0	0	0	0	0	0	0	0	1	0	

Em que aresta corresponde a 2 posições na matriz. Por exemplo, a aresta "e 2 1" vai marcar com '1' em p[2][6] e p[6][2].

A minha dúvida é como é que consigo ler o ficheiro clq e colocar no txt os 1's e 0's correspondentes a cada vertice.

p.s. O numero 20 antes da matriz corresponde ao numero de vertices. Ou seja, no ficheiro clq em cima criaria uma matriz 45x45

O que tenho até agora é apenas isto: 

#include <stdio.h>
#include <stdlib.h>


int main(int argc, char** argv) {

    FILE *f1, *f2;
    char filename[20], c;
    
    f1 = fopen("brock200_1.clq", "r");
    if(f1 == NULL)
    {
        printf("Erro ao abrir o ficheiro");
        exit(0);
    }
    
    printf("Introduza o nome do ficheiro para escrita: ");
    scanf("%s", filename);
    
    f2 = fopen(filename, "w");
    if(f2 == NULL)
    {
        printf("Impossivel abrir o ficheiro");
        exit(0);
    }
    
    c = fgetc(f1);
    
    while (c != EOF)
    {
        fputc(c, f2);
        c = fgetc(f1);
    }
    
    printf("Conteudo copiado para %s\n", filename);
    
    fclose(f1);
    fclose(f2);
    
    return 0;
}

Espero que me possam ajudar. Obrigado

Edited by riqu3s

Share this post


Link to post
Share on other sites
PsySc0rpi0n

Mesmo que pudesse ajudar, não ia conseguir, pois não percebi a tua explicação!

Eu não percebi como é que a aresta "e 2 1" se relaciona com as posições de uma matriz p[2][6] e p[6][2].

Ainda tentei ver se na matriz do ficheiro .txt a linha 2, coluna 6 continha um '1', mas não.

Ainda tentei ver se na matriz do ficheiro .txt, a coluna 2, linha 6 continha um '1', mas também não.

Também não percebi como é que 20 vértices criam uma matriz de 45x45 (atenção que eu não sei o que são grafos).

 

Edited;

Bom, depois de ver o que são grafos, acho que já tenho ideia do que são.

Mas ler o ficheiro é relativamente fácil.

Se o file .txt tem várias linhas separadas pelo caractér '\n', é ler caractér a caractér e guardar em cada linha de uma matriz, mudando essa linha sempre que se encontrar um '\n' no ficheiro.

Se por alguma razão o file .txt não tem o caractér '\n' a separar as linhas, é ir lendo o ficheiro até chegar ao caractér 'x' que será o caractér que está na última coluna da matriz e mudar de linha na matriz e continuar a ler o ficheiro.

Agora relacionar cada vértice com a posição na matriz é que já não tenho ideia de como fazer.

Edited by PsySc0rpi0n

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
HappyHippyHippo

lendo por alto, realmente o que pretendes é bastante simples, mas quando entra os exemplos (os números apresentados) tudo se desmorona e não faz sentido nenhum.

antes de opinar o que quer que seja, podes confirmar os valores apresentados no tópico original ? 


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.