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;
}
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Atualizar Debian Online de uma Versão para outra
Dica para encontrar diversos jogos Indies criativos
Instalando Discord no Debian 13
Instalar driver Nvidia no Debian 13
Redimensionando, espelhando, convertendo e rotacionando imagens com script
paginação dos favoritos não funciona no vivaolinux[BU... (4)
Driver da nvidia e desempenho em jogos (2)
A escola é altamente ineficiente e ineficaz! (13)
Sincronização Horario Estação de trabalho máquinas domínio com samba N... (2)