Conversor de Grafo de adjacencia binaria
// Programadores: Vinicius Woeth de Souza e Daniel Lima de Almeida Serra
// Data: 23/09/2014
// Dialogo: Este programa le a matriz de um grafo de adjacencia e o imprime em um arquivo .bin de adjacencia binaria
// Declaraçao das bibliotecas utilizadas
#include <stdio.h>
#include <stdlib.h>
#define MAX 200
int bin_to_dec(int bin);
int main(void){
// Declaração das variaveis locais int tam, matriz[MAX][MAX]; int matbin[MAX][MAX] = {{0}}; int linha, coluna, viz[MAX], resto; int comp[MAX] = {0}, comp2[MAX] = {0};
// Arquivo texto e binario FILE *file_t, *file_b; // Cria arquivo binario e abre arquivo txt file_t = fopen("grafo.txt", "r") ; // abre arquivo txt file_b = fopen("grafo_conv.bin", "wb"); // cria arquivo binario
// Le matriz fscanf(file_t, "%d", &tam); for (linha = 0; linha < tam; linha++){ fscanf(file_t, "%d", &viz[linha]); for (coluna = 0; coluna < viz[linha]; coluna++){ fscanf(file_t, "%d", &matriz[linha][coluna]); matbin[linha][matriz[linha][coluna]] = 1;
}// fim for coluna }// fim for linha // fecha arquivo txt fclose(file_t);
resto = 8 - (tam % 8); // converter grafo em binario for (int i = 0; i < tam; i++){ for (int j = 0; j < tam; j++){ if(j < 8) comp[i] = (comp[i]*10) + matbin[i][j]; else comp2[i] = (comp2[i]*10) + matbin[i][j];
}// fim for i for (int h = 0; h < resto; h++){ resto = 8 - (tam % 8); comp2[i] = comp2[i] * 10; }// fim for h }// fim for j
// Imprime matriz adj binaria fwrite(&tam, sizeof(int), 1, file_b); for (int i = 0; i < tam; i++){ comp[i] = bin_to_dec(comp[i]); comp2[i] = bin_to_dec(comp2[i]); fwrite(&comp[i], sizeof(char), 1, file_b); fwrite(&comp2[i], sizeof(char), 1, file_b); } //fwrite("\n");
// fecha o arquivo binario fclose(file_b);
}//fim funçao principal
// função: bin_to_dec
// Dialogo: Esta funçao tranforma o numero binario em decimal
// converte de binario para decimal int bin_to_dec(int bin){ int total = 0;