polska Posted July 20, 2012 at 02:31 PM Report #469388 Posted July 20, 2012 at 02:31 PM Boas pessoal, estive a resolver alguns exercícios das finais de 2006 a 2008 e deparei-me com este problema: http://www.dcc.fc.up.pt/oni/problemas/2008/final/probB.html Eu pensei em algo como permutações, se nos dão o número de ordem e querem saber a que número fácil de escrever corresponde, pensei que a permutar estes mesmos números, teria uma solução que passava no tempo sem dificuldades.. Mas não sei se estou certo, e estou a ter dificuldades em perceber como fazer as permutações, alguma ajuda? Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
Warrior Posted July 20, 2012 at 04:34 PM Report #469410 Posted July 20, 2012 at 04:34 PM (edited) Não estou a perceber a tua ideia com as permutações, uma vez que a ordem dos algarismos é essencial para saber se ele é fácil de escrever ou não. Por exemplo, 147 é fácil de escrever, mas 417 ou 714 não é. Edited July 20, 2012 at 04:34 PM by Warrior
pikax Posted July 20, 2012 at 05:03 PM Report #469412 Posted July 20, 2012 at 05:03 PM eu acho que fica mais facil se pensares no problema como ele e' na realidade, tens o teclado do telemovel(e' uma matriz) basta somares/subtraires o i ou a , basta um ciclo ate' ao maior numero para ficares a saber de todos Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
Warrior Posted July 20, 2012 at 05:31 PM Report #469413 Posted July 20, 2012 at 05:31 PM Não consigo perceber o que é o I e o A. Já agora, qual é o maior número?
polska Posted July 20, 2012 at 06:28 PM Author Report #469422 Posted July 20, 2012 at 06:28 PM (edited) Secalhar estou com a noção de permutação mal, tipo eu pensei em saber numeros fáceis através de outros já calculados.. Não consigo perceber o que é o I e o A. Já agora, qual é o maior número? não é 99? Edited July 20, 2012 at 06:29 PM by polska Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
pikax Posted July 20, 2012 at 07:16 PM Report #469431 Posted July 20, 2012 at 07:16 PM (edited) Não consigo perceber o que é o I e o A. e' o tamanho da matriz, I e o A sao as variaveis que uso quando faco 2 for's, fui pouco explicito desculpem 😄 EDIT: a matriz e' o teclado do telemovel END EDIT; não é 99? Seguem-se exactamente C linhas, cada uma delas contendo um número de ordem N da sequência (1 ≤ N ≤ 150 000). Estes números podem vir por qualquer ordem. Edited July 20, 2012 at 07:17 PM by pikax Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
polska Posted July 20, 2012 at 11:55 PM Author Report #469461 Posted July 20, 2012 at 11:55 PM e' o tamanho da matriz, I e o A sao as variaveis que uso quando faco 2 for's, fui pouco explicito desculpem 😄 EDIT: a matriz e' o teclado do telemovel END EDIT; Tens razão, eu estava apenas a pensar em numeros fáceis com até 2digitos, mas a mais... O que tu me dizes então é fazer um for que verifica se o número é fácil de escrever, até encontrar o máximo necessário.. certo? Mas isto não é uma brute force? Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
pmg Posted July 21, 2012 at 09:25 AM Report #469477 Posted July 21, 2012 at 09:25 AM Mas isto não é uma brute force? Olha bem para este input: 2 20000 18500 Repara que no calculo (brute-force) do primeiro valor, ja passaste pelo calculo do segundo valor. Acho que isso (a "memoization") é o que o problema pretende testar. Nao vais calcular duas vezes se o numero 4111233 é facil de escrever... What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
Warrior Posted July 21, 2012 at 01:31 PM Report #469516 Posted July 21, 2012 at 01:31 PM (edited) Ainda assim isso não seria suficiente para resolver o problema para 100 pontos. Se bem me lembro da solução, embora possa estar a confundir, este é um dos problemas mais difíceis das ONI. Edited July 21, 2012 at 01:32 PM by Warrior
polska Posted July 21, 2012 at 02:37 PM Author Report #469526 Posted July 21, 2012 at 02:37 PM Olha bem para este input: 2 20000 18500 Repara que no calculo (brute-force) do primeiro valor, ja passaste pelo calculo do segundo valor. Acho que isso (a "memoization") é o que o problema pretende testar. Nao vais calcular duas vezes se o numero 4111233 é facil de escrever... Eu também reparei nisso, mas para isso resolver isso bastava fazer o sort dos numeros dados e parava de pesquisar no ultimo.. Ainda assim isso não seria suficiente para resolver o problema para 100 pontos. Se bem me lembro da solução, embora possa estar a confundir, este é um dos problemas mais difíceis das ONI. Pois, eu estava mesmo a tentar perceber a solução dos 100 pontos xb . Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
pmg Posted July 21, 2012 at 04:53 PM Report #469539 Posted July 21, 2012 at 04:53 PM Hmmm ... tou a ver a dificuldade :/ Deve ser preciso considerar os numeros como strings e fazer uma especie de grafo dinamico, que se vai construindo a medida das necessidades (uma versao reduzida talvez de para os 100 pontos) Exemplo para dois digitos: a seguir ao ...12 vem o ...14 a seguir ao ...14 vem o (MUDANCA DE DIGITO: talvez ...21) Exemplo para tres digitos: a seguir ao ...452 vem o ...454 a seguir ao ...454 vem o ...455 a seguir ao ...455 vem o ...456 a seguir ao ...456 vem o ...458 a seguir ao ...458 vem o ...474 (sem MUDANCA DE DIGITO) a seguir ao ...474 vem o ...477 a seguir ao ...477 vem o ...478 a seguir ao ...478 vem o (MUDANCA DE DIGITO: talvez ...521) What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
mogers Posted July 21, 2012 at 05:15 PM Report #469543 Posted July 21, 2012 at 05:15 PM Ainda assim isso não seria suficiente para resolver o problema para 100 pontos. Se bem me lembro da solução, embora possa estar a confundir, este é um dos problemas mais difíceis das ONI. Não estás a confundir com o problema Em busca dos enunciados perdidos? Não tenho a minha resolução deste problema aqui comigo, mas parece-me que é um simples problema de pesquisa. Repara que isto é quase como aqueles problemas com labirintos, onde só podes andar para a esquerda,direita, cima e baixo. Neste caso isso é feito na matriz do teclado. Para lidar com o limite dos 150000 primeiros, ou usas uma priority_queue para processar os mais pequenos, ou primeiro fazes uma bfs até um número grande e verificas à mão qual é o 150000º. hint: em vez de começares num único ponto da matriz, começas a pesquisa nos digitos 1..9 e em cada passo avanças para os seus vizinhos no grafo. "What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.
HappyHippyHippo Posted July 21, 2012 at 05:26 PM Report #469544 Posted July 21, 2012 at 05:26 PM bem achei o problema engraçado e fiz isso assim dos pés para as mãos ... fiz poucos testes mas deram correcto de notar que a maior parte do código é a implementação de uma queue num array circular de redimensionamento dinâmico #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Queue { int * list; int size; int count; int start; int end; } Queue; int queueInit(Queue * queue) { if (queue == NULL) return -1; if ((queue->list = calloc(sizeof(int), 32)) == NULL) return -2; queue->size = 32; queue->count = 0; queue->start = 0; queue->end = 0; return 0; } int queueUninit(Queue * queue) { free(queue->list); return 0; } int queueResize(Queue * queue) { int * aux = NULL; int size = 0; if (queue == NULL) return -1; if ((aux = calloc(sizeof(int), queue->size * 2)) == NULL) return -2; if (queue->count > 0) { if (queue->start < queue->end) { size = queue->end - queue->start; memcpy(aux, &queue->list[queue->start], size * sizeof(int)); } else { size = queue->size - queue->start; memcpy(aux, &queue->list[queue->start], size * sizeof(int)); if ((size = queue->end) != 0) { size = queue->end; memcpy(&(aux[queue->size - queue->start]), &queue->list[0], queue->end * sizeof(int)); } } } free(queue->list); queue->list = aux; queue->size *= 2; queue->start = 0; queue->end = queue->count; return 0; } int queueEnqueue(Queue * queue, int value) { int result = 0; if (queue == NULL) return -1; if (queue->count == queue->size) { if ((result = queueResize(queue)) != 0) return result; } queue->list[queue->end] = value; queue->count++; queue->end++; if (queue->end == queue->size) queue->end = 0; return 0; } int queueDequeue(Queue * queue, int * value) { if (queue == NULL || value == NULL) return -1; if (queue->count == 0) return -2; *value = queue->list[queue->start]; queue->count--; queue->start++; if (queue->start == queue->size) queue->start = 0; return 0; } int main() { Queue bfs, targets; int target = 0, check = 0, order = 1; queueInit(&bfs); queueInit(&targets); // esta entrada deverá ser ordenada queueEnqueue(&targets, 14); queueEnqueue(&targets, 20); queueEnqueue(&targets, 24); queueEnqueue(&bfs, 1); queueEnqueue(&bfs, 2); queueEnqueue(&bfs, 3); queueEnqueue(&bfs, 4); queueEnqueue(&bfs, 5); queueEnqueue(&bfs, 6); queueEnqueue(&bfs, 7); queueEnqueue(&bfs, 8); queueEnqueue(&bfs, 9); while (targets.count != 0) { queueDequeue(&targets, &target); if (target == 0) printf("%d: %d\n", target, 0); else { do { order++; queueDequeue(&bfs, &check); switch (check % 10) { case 0: queueEnqueue(&bfs, (check*10)+0); queueEnqueue(&bfs, (check*10)+8); break; case 1: queueEnqueue(&bfs, (check*10)+1); queueEnqueue(&bfs, (check*10)+2); queueEnqueue(&bfs, (check*10)+4); break; case 2: queueEnqueue(&bfs, (check*10)+1); queueEnqueue(&bfs, (check*10)+2); queueEnqueue(&bfs, (check*10)+3); queueEnqueue(&bfs, (check*10)+5); break; case 3: queueEnqueue(&bfs, (check*10)+2); queueEnqueue(&bfs, (check*10)+3); queueEnqueue(&bfs, (check*10)+6); break; case 4: queueEnqueue(&bfs, (check*10)+1); queueEnqueue(&bfs, (check*10)+4); queueEnqueue(&bfs, (check*10)+5); queueEnqueue(&bfs, (check*10)+7); break; case 5: queueEnqueue(&bfs, (check*10)+2); queueEnqueue(&bfs, (check*10)+4); queueEnqueue(&bfs, (check*10)+5); queueEnqueue(&bfs, (check*10)+6); queueEnqueue(&bfs, (check*10)+8); break; case 6: queueEnqueue(&bfs, (check*10)+3); queueEnqueue(&bfs, (check*10)+5); queueEnqueue(&bfs, (check*10)+6); queueEnqueue(&bfs, (check*10)+9); break; case 7: queueEnqueue(&bfs, (check*10)+4); queueEnqueue(&bfs, (check*10)+7); queueEnqueue(&bfs, (check*10)+8); break; case 8: queueEnqueue(&bfs, (check*10)+0); queueEnqueue(&bfs, (check*10)+5); queueEnqueue(&bfs, (check*10)+7); queueEnqueue(&bfs, (check*10)+8); queueEnqueue(&bfs, (check*10)+9); break; case 9: queueEnqueue(&bfs, (check*10)+6); queueEnqueue(&bfs, (check*10)+8); queueEnqueue(&bfs, (check*10)+9); break; } } while (target != order); printf("%d: %d\n", target, check); } } queueUninit(&targets); queueUninit(&bfs); return 0; } PS : o resultado que me dá ao numero de ordem 150000 é o 121458877 e a bfs aumentou até ter 524288 de espaços disponíveis PS :- pequenos erros corrigidos 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
pmg Posted July 21, 2012 at 07:08 PM Report #469551 Posted July 21, 2012 at 07:08 PM (edited) o resultado que me dá ao numero de ordem 150000 é o 121458877 A mim da-me (sem passar no tempo da oni): 98788523 O resultado que me da ao numero de ordem #97 é o 521: a ti da-te o 532 (que nao é um resultado valido!) Edited July 21, 2012 at 07:09 PM by pmg What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
HappyHippyHippo Posted July 21, 2012 at 07:10 PM Report #469552 Posted July 21, 2012 at 07:10 PM (edited) A mim da-me (sem passar no tempo da oni): 98788523 não faço ideia ... como disse só fiz uns pequenos testes e não estou para calcular à mão os resultados elevados como esses no que toca a tempos, como nunca entrei sequer no site da ONI sem faço ideia como posso testar 😄 O resultado que me da ao numero de ordem #97 é o 521: a ti da-te o 532 (que nao é um resultado valido!) já vi onde está o bug: case 5: queueEnqueue(&bfs, (check*10)+3); // <--------- deveria ser 2, foi dos meus dedos gordos queueEnqueue(&bfs, (check*10)+4); queueEnqueue(&bfs, (check*10)+5); queueEnqueue(&bfs, (check*10)+6); queueEnqueue(&bfs, (check*10)+8); Edited July 21, 2012 at 07:12 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
polska Posted July 21, 2012 at 07:11 PM Author Report #469554 Posted July 21, 2012 at 07:11 PM Hmmm ... tou a ver a dificuldade :/ Deve ser preciso considerar os numeros como strings e fazer uma especie de grafo dinamico, que se vai construindo a medida das necessidades (uma versao reduzida talvez de para os 100 pontos) Exemplo para dois digitos: a seguir ao ...12 vem o ...14 a seguir ao ...14 vem o (MUDANCA DE DIGITO: talvez ...21) Exemplo para tres digitos: a seguir ao ...452 vem o ...454 a seguir ao ...454 vem o ...455 a seguir ao ...455 vem o ...456 a seguir ao ...456 vem o ...458 a seguir ao ...458 vem o ...474 (sem MUDANCA DE DIGITO) a seguir ao ...474 vem o ...477 a seguir ao ...477 vem o ...478 a seguir ao ...478 vem o (MUDANCA DE DIGITO: talvez ...521) Não estás a confundir com o problema Em busca dos enunciados perdidos? Não tenho a minha resolução deste problema aqui comigo, mas parece-me que é um simples problema de pesquisa. Repara que isto é quase como aqueles problemas com labirintos, onde só podes andar para a esquerda,direita, cima e baixo. Neste caso isso é feito na matriz do teclado. Para lidar com o limite dos 150000 primeiros, ou usas uma priority_queue para processar os mais pequenos, ou primeiro fazes uma bfs até um número grande e verificas à mão qual é o 150000º. hint: em vez de começares num único ponto da matriz, começas a pesquisa nos digitos 1..9 e em cada passo avanças para os seus vizinhos no grafo. O que eu pensei neste problema, foi ter então a matriz com os numeros e tinha uma função que gerava todos os números até ao máximo numero de ordem dado no input, por exemplo 30, gerava então os 30 primeiros números fáceis, mas o problema é que ou tinha de lidar com strings ou vectores, porque quando chego a números com 2 ou mais digitos tenho que os juntar... Eu vou tentar implementar uma solução com as vossas dicas, e vou tentar a minha tambem.. bem achei o problema engraçado e fiz isso assim dos pés para as mãos ... fiz poucos testes mas deram correcto de notar que a maior parte do código é a implementação de uma 8i]queue[/i] num array circular de redimensionamento dinâmico #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Queue { int * list; int size; int count; int start; int end; } Queue; int queueInit(Queue * queue) { if (queue == NULL) return -1; if ((queue->list = calloc(sizeof(int), 32)) == NULL) return -2; queue->size = 32; queue->count = 0; queue->start = 0; queue->end = 0; return 0; } int queueUninit(Queue * queue) { free(queue->list); return 0; } int queueResize(Queue * queue) { int * aux = NULL; int size = 0; if (queue == NULL) return -1; if ((aux = calloc(sizeof(int), queue->size * 2)) == NULL) return -2; if (queue->count > 0) { if (queue->start < queue->end) { size = queue->end - queue->start; memcpy(aux, &queue->list[queue->start], size * sizeof(int)); } else { size = queue->size - queue->start; memcpy(aux, &queue->list[queue->start], size * sizeof(int)); if ((size = queue->end) != 0) { size = queue->end; memcpy(&(aux[queue->size - queue->start]), &queue->list[0], queue->end * sizeof(int)); } } } free(queue->list); queue->list = aux; queue->size *= 2; queue->start = 0; queue->end = queue->count; return 0; } int queueEnqueue(Queue * queue, int value) { int result = 0; if (queue == NULL) return -1; if (queue->count == queue->size) { if ((result = queueResize(queue)) != 0) return result; } queue->list[queue->end] = value; queue->count++; queue->end++; if (queue->end == queue->size) queue->end = 0; return 0; } int queueDequeue(Queue * queue, int * value) { if (queue == NULL || value == NULL) return -1; if (queue->count == 0) return -2; *value = queue->list[queue->start]; queue->count--; queue->start++; if (queue->start == queue->size) queue->start = 0; return 0; } int main() { Queue bfs, targets; int target = 0, check = 0, order = 1; queueInit(&bfs); queueInit(&targets); // esta entrada deverá ser ordenada queueEnqueue(&targets, 14); queueEnqueue(&targets, 20); queueEnqueue(&targets, 24); queueEnqueue(&bfs, 1); queueEnqueue(&bfs, 2); queueEnqueue(&bfs, 3); queueEnqueue(&bfs, 4); queueEnqueue(&bfs, 5); queueEnqueue(&bfs, 6); queueEnqueue(&bfs, 7); queueEnqueue(&bfs, 8); queueEnqueue(&bfs, 9); while (targets.count != 0) { queueDequeue(&targets, &target); if (target == 0) printf("%d: %d\n", target, 0); else { do { order++; queueDequeue(&bfs, &check); switch (check % 10) { case 0: queueEnqueue(&bfs, (check*10)+9); break; case 1: queueEnqueue(&bfs, (check*10)+1); queueEnqueue(&bfs, (check*10)+2); queueEnqueue(&bfs, (check*10)+4); break; case 2: queueEnqueue(&bfs, (check*10)+1); queueEnqueue(&bfs, (check*10)+2); queueEnqueue(&bfs, (check*10)+3); queueEnqueue(&bfs, (check*10)+5); break; case 3: queueEnqueue(&bfs, (check*10)+2); queueEnqueue(&bfs, (check*10)+3); queueEnqueue(&bfs, (check*10)+6); break; case 4: queueEnqueue(&bfs, (check*10)+1); queueEnqueue(&bfs, (check*10)+4); queueEnqueue(&bfs, (check*10)+5); queueEnqueue(&bfs, (check*10)+7); break; case 5: queueEnqueue(&bfs, (check*10)+3); queueEnqueue(&bfs, (check*10)+4); queueEnqueue(&bfs, (check*10)+5); queueEnqueue(&bfs, (check*10)+6); queueEnqueue(&bfs, (check*10)+8); break; case 6: queueEnqueue(&bfs, (check*10)+3); queueEnqueue(&bfs, (check*10)+5); queueEnqueue(&bfs, (check*10)+6); queueEnqueue(&bfs, (check*10)+9); break; case 7: queueEnqueue(&bfs, (check*10)+4); queueEnqueue(&bfs, (check*10)+7); queueEnqueue(&bfs, (check*10)+8); break; case 8: queueEnqueue(&bfs, (check*10)+0); queueEnqueue(&bfs, (check*10)+5); queueEnqueue(&bfs, (check*10)+7); queueEnqueue(&bfs, (check*10)+8); queueEnqueue(&bfs, (check*10)+9); break; case 9: queueEnqueue(&bfs, (check*10)+6); queueEnqueue(&bfs, (check*10)+8); queueEnqueue(&bfs, (check*10)+9); break; } } while (target != order); printf("%d: %d\n", target, check); } } queueUninit(&targets); queueUninit(&bfs); return 0; } PS : o resultado que me dá ao numero de ordem 150000 é o 121458877 e a bfs aumentou até ter 524288 de espaços disponíveis Happy quando tentei compilar o teu programa, para seguir passo a passo, deu-me este erro :s : error C2440: '=' : cannot convert from 'void *' to 'int *' , nesta linha : if ((aux = calloc(sizeof(int), queue->size * 2)) == NULL) Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
HappyHippyHippo Posted July 21, 2012 at 07:20 PM Report #469557 Posted July 21, 2012 at 07:20 PM Happy quando tentei compilar o teu programa, para seguir passo a passo, deu-me este erro :s : error C2440: '=' : cannot convert from 'void *' to 'int *' , nesta linha : if ((aux = calloc(sizeof(int), queue->size * 2)) == NULL) faz cast ... deves ter prai uma flag no compilador que restringe este tipo de atribuições IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
pmg Posted July 21, 2012 at 07:24 PM Report #469558 Posted July 21, 2012 at 07:24 PM (edited) error C2440: '=' : cannot convert from 'void *' to 'int *' , nesta linha : O teu compilador nao esta configurado para C: estas a compilar com um compilador de C++. Em C, o tipo void* e compativel com ponteiro para qualquer tipo de objecto. já vi onde está o bug: Outro bug (depois da correccao anterior): o numero de ordem 146 devia ser 800, a ti da 809 (que nao e valido!) Edited July 21, 2012 at 07:23 PM by pmg What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
HappyHippyHippo Posted July 21, 2012 at 07:29 PM Report #469561 Posted July 21, 2012 at 07:29 PM (edited) Outro bug (depois da correccao anterior): o numero de ordem 146 devia ser 800, a ti da 809 (que nao e valido!) epa ... então não é que me esqueci do 0->0 ??? só tenho 0->9 !!!!! brigada ps : já agora não é 0->9 .. é 0->8 A mim da-me (sem passar no tempo da oni): 98788523 já tenho o mesmo resultado Edited July 21, 2012 at 07:33 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
mogers Posted July 21, 2012 at 07:37 PM Report #469565 Posted July 21, 2012 at 07:37 PM (edited) não faço ideia ... como disse só fiz uns pequenos testes e não estou para calcular à mão os resultados elevados como esses no que toca a tempos, como nunca entrei sequer no site da ONI sem faço ideia como posso testar 😄 Os problemas das ONI costumam ter um limite de tempo de 1 segundo por caso de teste. Eu prefiro usar algo como int adj[][6] = { {0,8} , {1,2,4} , {1,2,3,5} , {2,3,6} , {1,4,5,7} , { 2,4,5,6,8} , {3,5,6,9}, {4,7,8}, {0,5,7,8,9}, {6,8,9} }; int nadj[] = { 2 , 3 , 4, 3 , 4, 5 , 4 , 3, 5, 3 }; // ... queue<int> q; for (i = 1 ; i < 10 ; i++) q.push(i); // ... cur = q.front(); q.pop(); lastD = cur % 10; for (i = 0 ; i < nadj[lastD] ; i++) q.push( cur * 10 + adj[lastD][i] ); Edited July 21, 2012 at 07:53 PM by mogers "What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now