<commit_before>#include <grafo/grafo.h>
#include <dbg.h>
#include <stdio.h>

#define MAXBUF 1024

int ignorarDoisEspacos(char* s)
{
	int contador=0;
	int i=0;
	while(true)
	{
		if(contador==2)
		{
			break;
		}
		if(linha[i]==' ')
		{
			contador++;
		}
		if(!s[i])
				return i;
		i++;
	}
	return i;
}

Grafo *recuperarGrafo(FILE *arquivo);

int main(int argc, char *argv[]){
	FILE *arquivo;
	Grafo *g;
	char acao='c';
	char *rc;
	if(argc == 1){
		char buffer[MAXBUF];
		printf("Digite o nome do arquivo contendo as informações do grafo: \n");
		rc = fgets(buffer, MAXBUF, stdin);
		check(rc, "Erro na inserção do nome.");
		buffer[MAXBUF-1] = '\0';
		arquivo = fopen(buffer, "r");
		check(arquivo, "O arquivo não pode ser aberto.");
	} else{
		char *buffer = argv[1];
		arquivo = fopen(buffer, "r");
		check(arquivo, "O arquivo não pode ser aberto. Modo de uso: ./interface <nome do arquivo>");
	}

	g = recuperarGrafo(arquivo);
	check(g, "Falha na criação do grafo. Seu arquivo é no formato correto?");
	while(acao != 's'){
		printf("Digite a ação: ");
		check(scanf("%c%*c", &acao) == 1, "Passe uma das ações aceitas: 'l':listar vértices e custos\n 'a':adicionar vértice\n 'A':adicionar aresta \n \
				'r':remover vértice \n 'R':remover aresta \n 'v':verificar se o grafo é conexo \n 'c':encontrar caminho\n 's':sair");

		unsigned int inicio, fim, v;
		//Se não pedimos ao usuario o peso da aresta, valor é desnecessario
	//	double valor;
		switch(acao){
			case 'l':
				imprimeGrafo(g);
				break;
			case 'a':
				addVertice(g);
				printf("Vértice adicionado à rede.\n");
				break;
			case 'A':
				printf("\tDigite os indices inicial e final da aresta separados por espaço:\n");
				check(scanf("%u %u", &inicio, &fim)== 2, "É necessário que sejam digitados dois índices.");
				addAresta(g, inicio, fim);
				break;
			case 'r':
				printf("\tDigite o indice do vértice:\n");
				check(scanf("%u", &v) == 1, "É necessário que seja digitado um índice.");
				liberaVertice((void *) &v);
				break;
			case 'R':
				printf("\tDigite os indices inicial e final da aresta:\n");
				check(scanf("%u %u", &inicio, &fim)== 2, "É necessário que sejam digitados dois índices.");
				removeAresta(g, inicio, fim);
				break;
			case 'v':
				if(estaConexo(g)) printf("\tO Grafo é conexo.\n");
				else printf("\tO Grafo não é conexo.\n");
				break;
			case 'c':
				printf("\tDigite os indices inicial e final para saber se há um caminho:\n");
				check(scanf("%u %u", &inicio, &fim)== 2, "É necessário que sejam digitados dois índices.");
				if(existeCaminho(g, inicio, fim)){
					printf("\tExiste um caminho, e o caminho mínimo é:\n");
					Lista_imprimir(djikstra(g, inicio, fim));
				}
				break;
			case 's':
				imprimeGrafo(g);
				if(estaConexo(g)) printf("\tO Grafo é conexo.\n");
				else printf("\tO Grafo não é conexo.\n");
				printf("\t----\n");
				break;
			default:
				printf("Ações aceitas: 'l':listar vértices e custos\n 'a':adicionar vértice\n 'A':adicionar aresta \n \
				'r':remover vértice \n 'R':remover aresta \n 'v':verificar se o grafo é conexo \n 'c':encontrar caminho\n 's':sair\n");
				break;
		}
	}

	fclose(arquivo);
	return 0;
error:
	return 1;
}

#define MAXLINHA (16*1024)

Grafo *recuperarGrafo(FILE *arquivo){
	int tamanho=1, rc, i = 0, vizinho, id;
	//double nome;
	Grafo *grafo = initGrafo(1);
	char linha[MAXLINHA];
	fscanf(arquivo, "%MAXLINHA[^\n]%*c",linha);
	int i=0;
	int contador=0;
	while(!feof(arquivo))
	{
			int vizinho;
			addVertice(grafo);
			i+=ignorarDoisEspacos(linha);
			if(
			scanf("%d ");
	}

	
error:
	return NULL;
}<commit_msg>interface terminada<commit_after>#include <grafo/grafo.h>
#include <dbg.h>
#include <stdio.h>

#define MAXBUF 1024

int ignorarDoisEspacos(char* s)
{
	int contador=0;
	int i=0;
	while(true)
	{
		if(contador==2)
		{
			break;
		}
		if(linha[i]==' ')
		{
			contador++;
		}
		if(!s[i])
				return i;
		i++;
	}
	return i;
}

Grafo *recuperarGrafo(FILE *arquivo);

int main(int argc, char *argv[]){
	FILE *arquivo;
	Grafo *g;
	char acao='c';
	char *rc;
	if(argc == 1){
		char buffer[MAXBUF];
		printf("Digite o nome do arquivo contendo as informações do grafo: \n");
		rc = fgets(buffer, MAXBUF, stdin);
		check(rc, "Erro na inserção do nome.");
		buffer[MAXBUF-1] = '\0';
		arquivo = fopen(buffer, "r");
		check(arquivo, "O arquivo não pode ser aberto.");
	} else{
		char *buffer = argv[1];
		arquivo = fopen(buffer, "r");
		check(arquivo, "O arquivo não pode ser aberto. Modo de uso: ./interface <nome do arquivo>");
	}

	g = recuperarGrafo(arquivo);
	check(g, "Falha na criação do grafo. Seu arquivo é no formato correto?");
	while(acao != 's'){
		printf("Digite a ação: ");
		check(scanf("%c%*c", &acao) == 1, "Passe uma das ações aceitas: 'l':listar vértices e custos\n 'a':adicionar vértice\n 'A':adicionar aresta \n \
				'r':remover vértice \n 'R':remover aresta \n 'v':verificar se o grafo é conexo \n 'c':encontrar caminho\n 's':sair");

		unsigned int inicio, fim, v;
		//Se não pedimos ao usuario o peso da aresta, valor é desnecessario
	//	double valor;
		switch(acao){
			case 'l':
				imprimeGrafo(g);
				break;
			case 'a':
				addVertice(g);
				printf("Vértice adicionado à rede.\n");
				break;
			case 'A':
				printf("\tDigite os indices inicial e final da aresta separados por espaço:\n");
				check(scanf("%u %u", &inicio, &fim)== 2, "É necessário que sejam digitados dois índices.");
				addAresta(g, inicio, fim);
				break;
			case 'r':
				printf("\tDigite o indice do vértice:\n");
				check(scanf("%u", &v) == 1, "É necessário que seja digitado um índice.");
				liberaVertice((void *) &v);
				break;
			case 'R':
				printf("\tDigite os indices inicial e final da aresta:\n");
				check(scanf("%u %u", &inicio, &fim)== 2, "É necessário que sejam digitados dois índices.");
				removeAresta(g, inicio, fim);
				break;
			case 'v':
				if(estaConexo(g)) printf("\tO Grafo é conexo.\n");
				else printf("\tO Grafo não é conexo.\n");
				break;
			case 'c':
				printf("\tDigite os indices inicial e final para saber se há um caminho:\n");
				check(scanf("%u %u", &inicio, &fim)== 2, "É necessário que sejam digitados dois índices.");
				if(existeCaminho(g, inicio, fim)){
					printf("\tExiste um caminho, e o caminho mínimo é:\n");
					Lista_imprimir(djikstra(g, inicio, fim));
				}
				break;
			case 's':
				imprimeGrafo(g);
				if(estaConexo(g)) printf("\tO Grafo é conexo.\n");
				else printf("\tO Grafo não é conexo.\n");
				printf("\t----\n");
				break;
			default:
				printf("Ações aceitas: 'l':listar vértices e custos\n 'a':adicionar vértice\n 'A':adicionar aresta \n \
				'r':remover vértice \n 'R':remover aresta \n 'v':verificar se o grafo é conexo \n 'c':encontrar caminho\n 's':sair\n");
				break;
		}
	}

	fclose(arquivo);
	return 0;
error:
	return 1;
}

#define MAXLINHA (16*1024)

Grafo *recuperarGrafo(FILE *arquivo){
	int tamanho=1, rc, i = 0, vizinho, id;
	//double nome;
	Grafo *grafo = initGrafo(1);
	char linha[MAXLINHA];
	fscanf(arquivo, "%MAXLINHA[^\n]%*c",linha);
	int i=0;
	int contador=0;
	int linhas=1;
	while(!feof(arquivo))
	{
			int vizinho;
			i+=ignorarDoisEspacos(linha);
			if(grafo->numeroVertices<linhas)
			{
					int j=grafo->numeroVertices;
					for(;j<=linhas; j++)
					{
							addVertice(grafo);
					}
			}
			while(linha[i])
			{
					int vizinho;
					sscanf(linha+i, "%d %*f ", vizinho);
					if(grafo->numeroVertices<vizinho)
					{
							int k=grafo->numeroVertices;
							for(;k<=vizinho;k++)
							{
									addVertice(grafo);
							}
					}
					addAresta(grafo,linhas,vizinho);
					addAresta(grafo,vizinho,linhas);
			}
			fscanf(arquivo, "%MAXLINHA[^\n]%*c", linha);
			linhas++;
	}
	return grafo;

	
error:
	return NULL;
}
{'fraction_non_alphanumeric': 0.16962320341836074, 'fraction_numerical': 0.0076395183218956365, 'mean_word_length': 3.403648802736602, 'pattern_counts': {'":': 0, '<': 15, '<?xml version=': 0, '>': 15, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5285843', 'n_tokens_mistral': 3722, 'n_tokens_neox': 3226, 'n_words': 830}