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);
	}
		
	}
Ejemplo n.º 3
0
/* ����������������������������ͻ
   � 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");
}
Ejemplo n.º 4
0
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");
			}
		}