Tarefa 27

Tarefa 27

por Allan Panossian -
Número de respostas: 21
Olá Paulo,

Gostaria de saber se posso fazer uma pequena modificação no arquivo de entrada do exercício 1 da tarefa

Ao invés de
5
0-1 2
0-2 3
1-3 3
1-4 1
2-3 1
2-4 1
3-5 2
4-5 3
0 5

deixar como
5
0 - 1 2
0 - 2 3
1 - 3 3
1 - 4 1
2 - 3 1
2 - 4 1
3 - 5 2
4 - 5 3
0 5
Colocar esse espaço entre o "-" facilita a leitura pois podemos coletar tudo por fscanf de ints, sem o espaço o programa considera valores como "-1" (um negativo).

Penso que isso não deve ser a maior preocupação da tarefa, por isso estou propondo essa pequena modificação para facilitar essa parte.

Em resposta à Allan Panossian

Re: Tarefa 27

por Paulo Feofiloff -
Em resposta à Paulo Feofiloff

Re: Tarefa 27

por João Francisco Amorim Enomoto -
Alan, tem como fazer uma leitura que ignore esse "-" se é o caso. Se não me engano é algo como

scanf("%d-%d", &x, &y);

Só que você precisa garantir que haja um hifen entre os dois números, ou a leitura sairá errada.

Abraços!
Em resposta à João Francisco Amorim Enomoto

Re: Tarefa 27

por Allan Panossian -
acabei fazendo mais ou menos isso, só que guardei a leitura do "-" para saber se ainda estão sendo listados os arcos ou se já está listando o s e t
Em resposta à Allan Panossian

Re: Tarefa 27

por Allan Panossian -
Paulo,

estou pensando em implementar a fila das funcoes QUEUEput, QUEUEget, etc. numa fila de lista encadeada, mas para isso precisaria modificar um pouquinho a função
ShrtstAugmPath (tirar por exemplo o "G->V" de QUEUEinit(G->V)).

Posso fazer dessa maneira?


Em resposta à Allan Panossian

Re: Tarefa 27

por Paulo Feofiloff -
> estou pensando em implementar a fila das funcoes QUEUEput,
> QUEUEget, etc. numa fila de lista encadeada,

Não é mais simples usar um vetor?

> Posso fazer dessa maneira?

É claro qeu pode.


--Paulo

Em resposta à Allan Panossian

Re: Tarefa 27

por Allan Panossian -
Paulo, acho que existe algum erro nas funções de criar o grafo.

Tive problemas ao chamar as funções
GRAPHflow(G, s, t);
GRAPHmaxflow(G, s, t);
com o grafo dado no enunciado do item 1.

Porém, quando chamo
GRAPHflow(G, s, t-1);
GRAPHmaxflow(G, s, t-1);
tudo ocorre bem!

Revisei o meu código e não achei erro aparente nas inserções.

A única coisa que mudei nas funções que você deu, foi colocar:
(Graph) em Graph G = (Graph) malloc(sizeof *G); - GRAPHinit
(node **) em G->adj = (node **) malloc(V * sizeof(link)); - GRAPHinit
(link) em link x = (link) malloc(sizeof *x); - link NEW

Em resposta à Allan Panossian

Re: Tarefa 27

por Paulo Feofiloff -
Tem razão. Cometi um pequeno erro óbvio
no meu exemplo de dados de entrada.

Sobre "A única coisa que mudei...":
acho que o casting é supérfluo.


--Paulo
Em resposta à Paulo Feofiloff

Re: Tarefa 27

por Allan Panossian -
Acontece ehehhe, eu também não percebi o erro no arquivo de entrada. Vasculhei meu código inteiro para achar e erro e não achei!

Meu compilador reclama se eu não colocar o casting, uso o Dev C++
Em resposta à Allan Panossian

Re: Tarefa 27

por Fernando Carvalho -
Eu tenho um dúvida!

O enunciado da tarefa pede: "Escreva uma função que receba um arquivo (...)".

Bom, não sei como receber ou manipular arquivos. O que eu faço é usar scanf na função criando o grafo, e executar o ep com: t27 < entrada.txt.

Mas mesmo assim eu fiz uma função à parte:

Graph leEntrada () { ... }

Como além de devolver um Grafo eu tenho que especificar o "s" e o "t", eu alterei a estrutura de grafo assim:

struct graph {
int V;
int E;
Vertex s; <----
Vertex t; <----
link *adj;
};

E no main() fica:

Graph G = leEntrada();

Só por curiosidade: É assim que todo mundo faz?
Se não, como é feito?

Valeus, Fernando.

Em resposta à Fernando Carvalho

Re: Tarefa 27

por Paulo Feofiloff -

> Bom, não sei como receber ou manipular arquivos. O que
> eu faço é usar scanf na função criando o grafo, e
> executar o ep com: t27 < entrada.txt.

Tudo bem.


> struct graph {
> int V;
> int E;
> Vertex s; <----
> Vertex t; <----
> link *adj;
> };

(Falta capacidade, fluxo, etc.)

Embora faça sentido incluir s e t na estrutura,
é melhor usar a estrutura do Sedgewick e deixar s
e t de fora.


--Paulo
Em resposta à Allan Panossian

Re: Tarefa 27

por Allan Panossian -
Paulo,

a função flowV e GRAPHflow estão funcionando direto?

rodei para o grafo do enunciado e retornou -1;

rodei para o grafo do sedwick e funcionou;
http://www.ime.usp.br/~pf/mac0328-2006/aulas/shortestaugmpath.html#fig22.18)

rodei para um grafo trivial e funcionou;
6
0-1 2
1-2 2
2-3 2
3-4 2
4-5 2
0 4



rodei para o grafo do enunciado 1 da tarefa 26 e retornou -1
6          
0-1 2
0-2 3
0-3 2
1-2 1
1-3 1
1-4 1
2-4 1
2-5 2
3-4 2
3-5 3
4-5 2
0 5





Professor, tem como você dar alguma dica para resolver o exercicio 3?
Em resposta à Allan Panossian

Re: Tarefa 27

por Paulo Feofiloff -
> rodei para o grafo do enunciado 1 da tarefa 26 e retornou -1

Pense!

> tem como você dar alguma dica para resolver o exercicio 3?

http://www.ime.usp.br/~pf/mac0328-2006/aulas/maxflowmincut.html


--Paulo
Em resposta à Paulo Feofiloff

Re: Tarefa 27

por Bruno Yoshimura -
Olá Paulo,

Não seria melhor se pudéssemos entregar a tarefa 27 pelo Paca?
Além de ser um mini-ep, amanhã tem jogo. Quem for para o IME para entregar o trabalho vai pegar muito trânsito,

Obrigado,
Bruno
Em resposta à Bruno Yoshimura

Re: Tarefa 27

por Levy Vianna -

É verdade. Eu também não sei como vou fazer amanhã para entregar a tarefa, já que dia de jogo tem muito trânsito , se pudessemos entregar pelo paca ou por email seria uma boa.

  Levy