elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Foros Generales
| |-+  Dudas Generales (Moderador: engel lex)
| | |-+  Como hacer este programa
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como hacer este programa  (Leído 1,622 veces)
Omar4421

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Como hacer este programa
« en: 9 Agosto 2023, 05:53 am »

Hola que tal. Espero no molestar a nadie, soy nuevo en programación y me gustaria saber si me pueden ayudar a resolver este problema en codigo c++.
Descripción
El último obstáculo de Gilgamesh para visitar a Utanapíshtim era cruzar las aguas de la muerte y el único que lo podía ayudar era el barquero Urshanabí. Éste le pidió a Gilgamesh que fuera al bosque a cortar R árboles para hacer los R remos que le faltaban. Como Gilgamesh estaba cansado, quería caminar lo menos posible para traer uno por uno los árboles necesarios. Escribe un programa que, dadas las coordenadas de N árboles, calcule la mínima distancia D que debe caminar Gilgamesh desde el origen. Gilgamesh sólo puede cargar un árbol a la vez.

Entrada
Dos enteros N y R, seguidos de N parejas de enteros,  Xi,Yi que son las coordenadas (Xi,Yi) del árbol i.

Salida
El valor de D (redondeado al entero más cercano).


En línea

Danielㅤ


Desconectado Desconectado

Mensajes: 1.681


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: Como hacer este programa
« Respuesta #1 en: 9 Agosto 2023, 15:25 pm »

Hola, deberes no hacemos pero si ayudamos, por lo tanto muestranos el código que llevas hecho hasta ahora.


Un saludo


En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.220


Superhacker (es broma xD )


Ver Perfil
Re: Como hacer este programa
« Respuesta #2 en: 9 Agosto 2023, 21:34 pm »

Me tomaría mucho tiempo y esfuerzo poder hacer eso, si es que acaso puedo, así que paso.

Sólo diré que, me parece, te falta especificar la posición inicial de Gilgamesh, pues parece evidente que todos los árboles están más o menos hacia la misma dirección, hacia el bosque, pero también podría ser que haya árboles por ejemplo abajo y en los costados, que sería similar a que Gilgamesh estuviera en el centro.

Y acabo de notar algo o hay algo que no entiendo. Si debe llevar todos los árboles al mismo punto y sólo puede cargar uno, entonces no importa qué camino haga, es lo mismo, simplemente debe cortar los más cercanos primero en caso de que estén en la misma trayectoria que otros.

Casualmente en mi barrio cortaron árboles y voy por ahí 1 vez por día con tarros a juntar ramas pequeñas para un familiar. No es como tu problema pero imaginate, hay ramas a 1 cuadra, a 2 cuadras, a 3, etc, no tengo carro y hago poco ejercicio así que no quiero reventarme (duele la espalda, los brazos, y además las piernas y pies suelo tenerlas dormidas no sé por qué). ¿Cómo no esforzarme demasiado? Lo que hago es ir al lugar más lejano en que haya ramas, juntar de ahí, ir acercándome a mi casa, y volver cuando tenga los tarros llenos. Si fuese llenando los tarros mientras avanzo, caminaría con ellos cargados a la ida y a la vuelta.

Pero la situación es más compleja y mi estrategia tiene una falla: Hay sitios más cercanos en los que otra gente está agarrando o que podrían quemar eso (en mi país algunos queman las cosas de plantas porque lo consideran feo o mugre) o quitarlo (barrenderos) >___<
Además si voy por la derecha de la calle, juntando, y vuelvo por el otro lado, entonces no tengo que estar cruzando y recorriendo 2 veces el mismo lugar. Eso en parte lo aprendí cuando limpiaba pisos.
« Última modificación: 9 Agosto 2023, 21:41 pm por Tachikomaia » En línea

Fernando Morales

Desconectado Desconectado

Mensajes: 46



Ver Perfil WWW
Re: Como hacer este programa
« Respuesta #3 en: 10 Agosto 2023, 20:03 pm »

Hola que tal. Espero no molestar a nadie, soy nuevo en programación y me gustaria saber si me pueden ayudar a resolver este problema en codigo c++.
Descripción
El último obstáculo de Gilgamesh para visitar a Utanapíshtim era cruzar las aguas de la muerte y el único que lo podía ayudar era el barquero Urshanabí. Éste le pidió a Gilgamesh que fuera al bosque a cortar R árboles para hacer los R remos que le faltaban. Como Gilgamesh estaba cansado, quería caminar lo menos posible para traer uno por uno los árboles necesarios. Escribe un programa que, dadas las coordenadas de N árboles, calcule la mínima distancia D que debe caminar Gilgamesh desde el origen. Gilgamesh sólo puede cargar un árbol a la vez.

Entrada
Dos enteros N y R, seguidos de N parejas de enteros,  Xi,Yi que son las coordenadas (Xi,Yi) del árbol i.

Salida
El valor de D (redondeado al entero más cercano).

No entiendo bien lo que necesitas si no veo lo que llevas hecho pero, se me ocurre que puede ser de la siguiente manera el código:

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <iomanip>

using namespace std;

struct Point {
    int x, y;
};

struct Edge {
    int u, v;
    double weight;
   
    bool operator<(const Edge& other) const {
        return weight < other.weight;
    }
};

vector<Point> trees;
vector<Edge> edges;
vector<int> parent;

int find(int x) {
    if (parent
  • == x)
        return x;
    return parent
  • = find(parent
  • );
}

void unionSets(int x, int y) {
    parent[find(x)] = find(y);
}

double calculateDistance(const Point& a, const Point& b) {
    return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}

double minimumWalkingDistance(int N) {
    sort(edges.begin(), edges.end());
    double totalDistance = 0.0;
   
    for (const Edge& edge : edges) {
        if (find(edge.u) != find(edge.v)) {
            unionSets(edge.u, edge.v);
            totalDistance += edge.weight;
        }
    }
   
    return totalDistance;
}

int main() {
    int N, R;
    cin >> N >> R;
   
    trees.resize(N);
    parent.resize(N);
   
    for (int i = 0; i < N; ++i) {
        cin >> trees.x >> trees.y;
        parent = i;
    }
   
    for (int i = 0; i < N; ++i) {
        for (int j = i + 1; j < N; ++j) {
            double distance = calculateDistance(trees, trees[j]);
            edges.push_back({i, j, distance});
        }
    }
   
    double minDistance = minimumWalkingDistance(N);
    int roundedDistance = static_cast<int>(round(minDistance * R));
   
    cout << roundedDistance << endl;
   
    return 0;
}
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
como hacer este programa?
Programación C/C++
stylecrusher 3 4,081 Último mensaje 16 Marzo 2011, 17:44 pm
por Don Pollo
Como puedo hacer este programa
Programación Visual Basic
NachoRs 6 4,034 Último mensaje 6 Octubre 2012, 01:19 am
por Tzdah
como podria hacer este programa en c++
Programación C/C++
eduardo17445 2 2,259 Último mensaje 18 Noviembre 2012, 19:35 pm
por eduardo17445
como podria hacer este programa en c++
Programación C/C++
eduardo17445 2 3,109 Último mensaje 28 Enero 2013, 01:25 am
por eduardo17445
No se como hacer este programa
Programación C/C++
Insidious 1 1,775 Último mensaje 3 Junio 2017, 12:25 pm
por MCKSys Argentina
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines