Enviado em 15/04/2014 - 22:25h
Oi gente, ccomecei a programar em C a 2 dias. Mas ja perguntei a uns colegas e ninguem sabe me dizer por que ta errado. Meu professor so ensina java e perguntar a ele durante a aula atraza o assunto. será que vcs podem me ajudar? este é o link da questao: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=sh...
#include <bits/stdc++.h>
using namespace std;
//declaro matriz principal
char array[105][105];
//declaro uma matriz secundária correspondente a principal, com todos os valores F/T
bool tem[105][105];
//declaro variaveis r(row ou linha), c(colunas), oleo(nmero de pocos de petroleo)
int r,c,oleo,cont;
//crio 2 arrays ja preenchidos com os numeros que eu preciso somar a linha/coluna de um elemento para ter seus(no máximo 8) vizinhos
int dr[8] = {1, 1, 1, 0, -1, -1, 0};
int dc[8] = {0, -1, 1, 1, -1, 1, -1};
//crio uma funcao que posteriormente servira para eu validar se os vizinhos existem ou nao(um elemento pode ter entre 0-8 vizinhos)
bool valid(int x, int y) {
return (x>=0 && y>=0 && x<r && y<c);
}
int main(){
//escaneio as variaveis que formam a matriz
while (scanf("%d %d", &r, &c) == 2 && r != 0 && c!=0) {
//digo que a matriz secundaria `tem` eh preenchida so com falsos e que oleo=0 no comeco
memset(tem,false,sizeof tem);
oleo = 0;
//leio a matriz
for (int i=0;i<r;i++){
for(int j=0; j<c;j++){
scanf("%c", &array[i][j]);
}
}
//leio cada elemento da matriz principal.
//por motivos de organizacao chamarei este elemento na matriz principal de ep
for (int i=0;i<r;i++){
for(int j=0; j<c;j++){
//caso ep = @ faca
if (array[i][j]=='@'){
//leia cada vizinho possivel de ep
if (cont<100){
for (int k=0;k<8;k++){
int nr = i+dr[k];
int nc = j+dc[k];
//este vizinho existe ?
if(valid(nr,nc)){
//por motivos de organizacao chamarei este elemento vizinho de ev
//se ele exite ele eh um @?
if(array[nr][nc]=='@'){
//entao ev eh um @. Mas ev ta marcado como True no seu elemento correspondente na matriz secundaria?
if (tem[nr][nc]==true){
//entao marque o elemento correspondente a ep como true
tem[i][j]=true;
cont++;
}
}
}
}
}
//o elemento ep eh falso?
if (tem[i][j]== false){
if (cont==100){
cont=0;
}
tem[i][j]=true;
oleo++;
cont++;
for (int k=0;k<8;k++){
int nr = i+dr[k];
int nc = j+dc[k];
if(valid(nr,nc)){
if(array[nr][nc]=='@'){
if (tem[nr][nc]== false){
tem[nr][nc]=true;
cont++;
}
}
}
}
}
}
}
}
printf("%d\n", oleo);
}
return 0;
}
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Criando uma VPC na AWS via CLI
Multifuncional HP imprime mas não digitaliza
Dica básica para escrever um Artigo.
Como Exibir Imagens Aleatórias no Neofetch para Personalizar seu Terminal
como coloco para instalar com esse erro. (13)
Alguém sabe de documentos de texto e /ou vídeo aulas de certificações ... (1)