\input cwebmac
% Zé Augusto 8/98

\documentclass[language=brazil,structure=flat]{cweb}

%% Escrevendo em português:
\usepackage[brazil]{babel}
\usepackage[T1]{fontenc}
%----------------------------

\setlength{\topmargin}{-0.5in}
\setlength{\textheight}{9in}
\setlength{\oddsidemargin}{-.125in}
\setlength{\evensidemargin}{-.125in}
\setlength{\textwidth}{6.75in}




\title{{\small Exemplo de Uso do Stanford GraphBase usando \texttt{CWEB}-\LaTeX%
\\
MAC 328 --- Introdução à Teoria dos Grafos --- 1998 \\}
Cidades}
\author{Zé Augusto}
\date{}

\begin{document}

\maketitle


\N{1}{1}Descrição.

Este programa em \texttt{CWEB} cria e grava num arquivo um grafo que
representa $4$ cidades com as distâncias entre elas.

\fi

\M{2}O programa começa com os arquivos a serem incluidos.
\Y\B\8\#\&{include} \.{"gb\_graph.h"}\C{ A estrutura de dados para criar o
grafo }\6
\8\#\&{include} \.{"gb\_save.h"}\C{ e para salvar nosso grafo }\par
\fi

\M{3}Programa principal.
\Y\B\&{int} \\{main}(\,)\1\1\2\2\6
${}\{{}$\5
\1\&{Graph} ${}{*}\\{grafo};{}$\6
\&{Vertex} ${}{*}\|u,{}$ ${}{*}\|v;{}$\6
\&{Arc} ${}{*}\|a;{}$\7
${}\\{grafo}\K\\{gb\_new\_graph}(\T{4}){}$;\C{ Criação do grafo }\6
\&{if} ${}(\\{grafo}\E\NULL){}$\1\5
\&{return} (\T{1});\C{ Não há memória disponível }\2\6
${}\\{sprintf}(\\{grafo}\MG\\{id},\39\.{"Grafo\ das\ 4\ Cidades}\)\.{"}){}$;\C{
A identidade (RG) do grafo }\6
${}\\{strcpy}(\\{grafo}\MG\\{util\_types},\39\.{"ZZZZZZZZZZZZZZ"});{}$\6
${}\|v\K\\{grafo}\MG\\{vertices};{}$\6
${}\|v\MG\\{name}\K\\{gb\_save\_string}(\.{"Sorocaba"}){}$;\C{ essa função
aloca memória                                          para o nome do vértice }%
\6
${}\|v\PP;{}$\6
${}\|v\MG\\{name}\K\\{gb\_save\_string}(\.{"Sao\ Roque"}){}$;\C{ A rotina de %
\\{save\_graph} não gosta de caracteres acentuados... Criei um filtro em \\{gb%
\_salva} para contornar essa situação. Esse programa, com este exemplo
acentuado, está no subdiretório \texttt{acentos}  }\6
${}\|v\PP;{}$\6
${}\|v\MG\\{name}\K\\{gb\_save\_string}(\.{"Sao\ Paulo"});{}$\6
${}\|v\PP;{}$\6
${}\|v\MG\\{name}\K\\{gb\_save\_string}(\.{"Santos"});{}$\6
${}\|u\K\\{grafo}\MG\\{vertices};{}$\6
${}\|v\K\|u+\T{1};{}$\6
${}\\{gb\_new\_edge}(\|u,\39\|v,\39\T{30});{}$\6
${}\|v\PP;{}$\6
${}\\{gb\_new\_edge}(\|u,\39\|v,\39\T{80});{}$\6
${}\|u\PP;{}$\6
${}\\{gb\_new\_edge}(\|u,\39\|v,\39\T{60});{}$\6
${}\|u\PP;{}$\6
${}\|v\PP;{}$\6
${}\\{gb\_new\_edge}(\|u,\39\|v,\39\T{50});{}$\6
${}\\{printf}(\.{"\ \ O\ grafo\ cujo\ nome}\)\.{\ oficial\ é:\ \%s\\n"},\39%
\\{grafo}\MG\\{id});{}$\6
${}\\{printf}(\.{"\ \ tem\ \%ld\ cidades\ e}\)\.{\ \%ld\ estradas\\n\\n"},\39%
\\{grafo}\MG\|n,\39\\{grafo}\MG\|m/\T{2});{}$\6
\&{for} ${}(\|v\K\\{grafo}\MG\\{vertices};{}$ ${}\|v<\\{grafo}\MG\\{vertices}+%
\\{grafo}\MG\|n;{}$ ${}\|v\PP){}$\1\6
\&{for} ${}(\|a\K\|v\MG\\{arcs};{}$ \|a; ${}\|a\K\|a\MG\\{next}){}$\1\5
${}\\{printf}(\.{"De\ \%s\ para\ \%s:\ \%ld\ }\)\.{km\\n"},\39\|v\MG\\{name},%
\39\|a\MG\\{tip}\MG\\{name},\39\|a\MG\\{len});{}$\2\2\6
${}\\{save\_graph}(\\{grafo},\39\.{"sorocaba.gb"});{}$\6
\\{gb\_recycle}(\\{grafo});\C{ Libera memória que foi alocada para criar o
grafo }\6
\&{return} (\T{0});\C{ Saída normal }\6
\4${}\}{}$\2\par
\fi

\M{4}

\cwebIndexIntro{%
Aqui vai uma lista de identificadores usados e onde eles aparecem.
Entradas grifadas indicam os lugares de definições. Mensagens de erros
também são mostradas.
}

\end{document}

\fi


\inx
\fin
\con
