Solução: Problema das trocas - UFRJ (Filipe Teles)

From AdonaiMedrado.Pro.Br
Jump to: navigation, search
#include <iostream>
 
using namespace std;
 
typedef struct Circulo
{
	int valor;
	char pessoa;
} circulo;
 
int errado(circulo vetor[], int tamanho)
{	
	for (int i = 1; i < tamanho; i++)
		if (vetor[i-1].pessoa > vetor[i].pessoa)
			return 1;
 
	return 0;
}
 
int main()
{
	int tamanho, entrada, j, cont;
	char insere, guarda;
 
	cin >> tamanho;
	while (tamanho)
	{
 
		circulo vetor[tamanho];
 
		for (int i = 0; i < tamanho; i++)
		{
			cin >> entrada;		
			vetor[i].valor = entrada;
			vetor[i].pessoa = 'A' + i;
		}
 
		cont = 0;
 
		j = 0;
		insere = 'A';
 
		do
		{	
			guarda = vetor[vetor[j].valor - 1].pessoa;
 
			for (int i = 0; i < tamanho; i++)
			{
				vetor[vetor[j].valor - 1].pessoa = insere;
				j = vetor[j].valor - 1;
				insere = guarda;
				guarda = vetor[vetor[j].valor - 1].pessoa;
			}
 
			cont++;
 
		} while (errado(vetor, tamanho));
 
		cout << cont << endl;
 
		cin >> tamanho;
	}
}