You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Analise o arquivo dados_grafos.txt, armazenando o grafo em uma estrutura de matriz. Após isto, responda corretamente, em função do grafo produzido a partir de
dados_grafo.txt, as questões seguintes ou NA (Não se aplica) quando for necessário:
Qual(is) o vértice(s) com maior(es) grau?
intgrau_do_maior_vertice(int**matriz)
{
inti, j, maior_grau, aux=0, vertice_com_maior_grau;
for (i=0; i<tamanho_matriz; i++)
{
for (j=0; j<tamanho_matriz; j++)
{
if (matriz[i][j] ==1)
{
aux++;
}
}
if (aux>maior_grau)
{
maior_grau=aux;
vertice_com_maior_grau=i;
}
aux=0;
}
returnvertice_com_maior_grau;
}
Apresente em um arquivo chamado dados_grafos_graus.txt o número do vértices seguido pelo seu respectivo grau.
voidescrever_graus_arquivo(char*nome_arquivo, int*graus, inttamanho)
{
FILE*arquivo=fopen(nome_arquivo, "w");
if (arquivo==NULL)
{
printf("Erro ao abrir o arquivo %s\n", nome_arquivo);
return;
}
inti;
for (i=0; i<tamanho; i++)
{
fprintf(arquivo, "Vertice %d: Grau %d\n", i, graus[i]);
}
fclose(arquivo);
}
Se existir, quais são os vértices isolados?
voidvertices_isolados(int**matriz) {
intisolado, count=0;
printf("Vértices isolados:\n");
for (inti=0; i<tamanho_matriz; i++) {
isolado=1;
for (intj=0; j<tamanho_matriz; j++) {
if (matriz[i][j] !=0) {
isolado=0;
break;
}
}
if (isolado) {
printf("%d\n", i);
count++;
}
}
}
Existe um vértice sumidouro?
voidvertice_sumidouro(int**matriz){
intaux=0;
printf("Vertice(s) sumidouros:\n");
for(intcont=0; cont<tamanho_matriz; cont++){
intsumidouro=1;
for(intcont2=0; cont2<tamanho_matriz; cont2++){
if (matriz[cont][cont2] !=0){
sumidouro=0;
break;
}
}
if(sumidouro){
printf("%d\n", cont);
aux++;
}
}
if (aux==0){ // Se aux ainda for 0, nenhum vértice sumidouro foi encontradoprintf("Nao foi encontrado vertice sumidouro!\n");
}
}
Existe um vértice fonte?
voidvertice_fonte(int**matriz){
intaux=0; // Inicializa aux com 0printf("Vertice(s) fonte:\n");
for(intcont=0; cont<tamanho_matriz; cont++){
intfonte=1;
for(intcont2=0; cont2<tamanho_matriz; cont2++){
if (matriz[cont2][cont] !=0){
fonte=0;
break;
}
}
if(fonte){
printf("%d\n", cont);
aux++;
}
}
if (aux==0){ // Se aux ainda for 0, nenhum vértice sumidouro foi encontradoprintf("Nao foi encontrado vertice sumidouro!\n");
}
}
Determine o grau de Emissão e Recepção de cada vértice e os coloque em arquivos chamados de "dados_grafos_emissao.txt" e "dados_grafos_recepcao.txt". Não se aplica
Apresente um arquivo com o grafo complementar da questão; repetida
Inverta a direção de todas as arestas do grafo da questão e apresente-os em um novo arquivo com o nome de "dados_grafos_invertido.txt".
Apresente o grafo complementar e os represente em um arquivo com o nome "dados_grafo_complementar.txt".
voidgrafo_complementar(int**matriz, char*nome_arquivo){
FILE*arquivo=fopen(nome_arquivo, "w");
if (arquivo==NULL)
{
printf("Erro ao abrir o arquivo %s\n", nome_arquivo);
return;
}
for(inti=0; i<tamanho_matriz; i++){
for(intj=0; j<tamanho_matriz; j++){
if (i==j) { // Verifica se é um elemento da diagonal principalfprintf(arquivo, "%d ", matriz[i][j]); // Mantém o valor original
} else {
if(matriz[i][j] ==0){
matriz[i][j] =1;
} else {
matriz[i][j] =0;
}
fprintf(arquivo, "%d ", matriz[i][j]);
}
}
fprintf(arquivo, "\n");
}
fclose(arquivo);
}
Apresente um novo arquivo chamado "dados_grafo_gerador.txt" com os vértices múltiplos de 5.
voidvertice_multiplo5(int**matriz, char*nome_arquivo){
FILE*arquivo=fopen(nome_arquivo, "w");
if (arquivo==NULL)
{
printf("Erro ao abrir o arquivo %s\n", nome_arquivo);
return;
}
fprintf(arquivo, "Vertices multiplos de 5:\n");
for(inti=0; i<tamanho_matriz; i++){
if(i % 5==0){
fprintf(arquivo, "%d\n", i);
}
}
fclose(arquivo);
}
Encontre o maior clique do grafo da questão.
Verifique se o primeiro e último vértice estão conectados