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;
}
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Visualizar arquivos em formato markdown (ex.: README.md) pelo terminal
Dando - teoricamente - um gás no Gnome-Shell do Arch Linux
Como instalar o Google Cloud CLI no Ubuntu/Debian
Mantenha seu Sistema Leve e Rápido com a Limpeza do APT!
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)
Ajuda Pra Melhoria do NFTABLES. (7)
Zorin OS - Virtual Box não consigo abrir maquinas virtuais (4)