int escorpiao(grafo *G) { // busca um vertice b que satisfaça a primeira propriedade int i, b = 0; for ( i=1; i<=V(G); i++ ) if ( grau(G, i) == V(G) - 2 ) b = i; // não satisfazendo a primeira propriedade sabe-se G não é escorpião if ( !b ) return 0; // busca o unico vertice nao vizinho de b int nao_vizinho_de_b = 0, num_nao_vizinhos_de_b = 0; for ( i=1; i<=V(G); i++ ) if ( G->A[b][i] == 0 && i != b ) { nao_vizinho_de_b = i; num_nao_vizinhos_de_b++; } // se o único vértice que não é vizinho de b não tem grau 1, então, // G não é escorpião if ( num_nao_vizinhos_de_b != 1 || grau(G, nao_vizinho_de_b) != 1 ) return 0; // se o vizinho do único vértice que não é vizinho de b não tem grau 2, // então, G não é escorpião int viz; // busca o vizinho do único vértice não vizinho de b for ( i=1; i<=V(G); i++ ) if ( G->A[nao_vizinho_de_b][i] == 1 ) viz = i; if ( grau(G, viz) != 2 ) // se tal vértice não tem grau 2, G não é escorpião return 0; return 1; // as propriedades foram satisfeitas. Logo, G é escorpião }
void grau(struct pessoa* p1, struct pessoa* p2, int i){//Aqui descobrimos o grau de parentesco de duas pessoas if(p1!=NULL) { if(p1=p2){ printf("O grau de parentesco eh %d", p2->geracao-i); } grau(p1->esq, p2, i); grau(p1->dir, p2, i); } }
/* ����������������������������ͻ � Construtores e Destrutores � ����������������������������ͼ */ template<class TpElem> ListaLigada<TpElem>::ListaLigada():pri(NULL) { versao(1, 0, 0); grau(VERSAO_LIVRE); data(4, 9, 1999); numero_de_serie(0); nome("Lista Ligada"); autor("Felipe Micaroni Lalli"); }
ProgramaPrincipal::ProgramaPrincipal() { // Mouse: mouse.area(0, 0, getmaxx(), getmaxy()); // Cabecalho: versao(1, 0, 0); grau(VERSAO_TESTE); data(30, 9, 1999); numero_de_serie(0); nome("Projeto GiraFun - COTUCA 1999"); autor("Caceffo, Lalli e Magalhaes"); // Criacao dos Objetos desktop = new DesktopCalhau(0, 0, getmaxx(), getmaxy()); ferramentas = new FormularioCalhau(565, 50, 635, QUANTAS_FERRAMENTAS * 32 + 86, "Obj."); frmdesenho = new FormularioCalhau(0, 0, 585, 473, "Desenho"); cmdsair = new BotaoSimplesCalhau(getmaxx() - 10, 0, 10, 10, &sair, &desenho_sair); area = new PintaFun(5, 20, 570, 465); frmnomearq = new FormularioCalhau(500, 10, 660, 60, "Nome do Arquivo"); nome_do_arquivo = new CaixaTextoCalhau(510, 32, 122, "novo.frn"); // A f¢rmula para calcular o y ‚ (i * 32 + 80) botao[0] = new BotaoSimplesCalhau(572, 80, 45, 30, &ferramenta_livre, &desenho_livre); botao[1] = new BotaoSimplesCalhau(572, 112, 45, 30, &ferramenta_ponto, &desenho_ponto); botao[2] = new BotaoSimplesCalhau(572, 144, 45, 30, &ferramenta_reta, &desenho_linha); botao[3] = new BotaoSimplesCalhau(572, 176, 45, 30, &ferramenta_circulo, &desenho_circulo); botao[4] = new BotaoSimplesCalhau(572, 208, 45, 30, &arquivo_abre, &desenho_abre); botao[5] = new BotaoSimplesCalhau(572, 240, 45, 30, &arquivo_salvar, &desenho_salvar); botao[6] = new BotaoSimplesCalhau(572, 272, 45, 30, &sobre, &desenho_sobre); botao[7] = new BotaoSimplesCalhau(572, 304, 45, 30, &muda_cor, &desenho_cor); botao[8] = new BotaoSimplesCalhau(572, 336, 45, 30, &muda_grossura, &desenho_grossura); botao[9] = new BotaoSimplesCalhau(572, 368, 45, 30, &arquivo_novo, &desenho_novo); // Modificando Propriedades Padräes desktop->c.cor_de_fundo = 1; frmdesenho->c_foco = VERDADEIRO; // Pondo Cada Macaco no Seu Galho desktop->insere(frmdesenho); desktop->insere(ferramentas); desktop->insere(frmnomearq); frmdesenho->insere(area); desktop->insere(cmdsair); frmnomearq->insere(nome_do_arquivo); for (int i = 0; i < QUANTAS_FERRAMENTAS; i++) ferramentas->insere(botao[i]); // Botando Para Funcionar ++mouse; ++mouse; desktop->exibe(mouse); desktop->loop(mouse, &evento); }
void main(){ char nome[10]; char nome1[10]; char nome2[10]; int d; char i,h; struct ponteiro p; struct ponteiro q; struct pessoa *raiz=(struct pessoa *)malloc(sizeof(struct pessoa));//Alocamos memoria para a raiz da arvore printf("Qual a primeira pessoa da arvore genealógica?\n"); gets(nome); raiz->nome=nome; raiz->geracao = 0; printf("%s\n", raiz->nome); insira(raiz);//Começamos a raiz propriamente aqui printf("Adicionar mais alguem? <S/N>"); scanf("%c", &h); if(h=='S' || h=='s'){ adiciona(raiz); } printf("Deseja fazer mais alguma coisa? \n1-)imprimir os membros por geracao \n2-)imprimir os antepassados de alguem \n "); printf("3-) imprimir labelled bracketing \n4-) calcular grau de parentesco \n5-) encerrar programa\n");//Aqui temos o menu scanf("%c",&i); if(i='1'){ printf("Qual geracao?"); scanf("%i", &d); print_gen(raiz,d); } else if(i='2'){ printf("De quem?"); gets(nome); emordem(raiz); } else if(i='3'){ imprimir_lb(raiz); } else if(i='4'){ printf("Pessoa 1:"); gets(nome1); printf("Pessoa 2"); gets(nome2); if(p.ponteiro->geracao > q.ponteiro->geracao){ grau(q.ponteiro, p.ponteiro, q.ponteiro->geracao); }else{ grau(p.ponteiro,q.ponteiro, p.ponteiro->geracao); } } else{ printf("Bye Bye"); } }