Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo
Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo
Il più recente robot per la pulizia domestica di Dreame, modello Aqua10 Ultra Roller, abbina un potente motore di aspirazione della polvere a un sofisticato sistema di lavaggio con rullo integrato. Il tutto governato dalla logica di intelligenza artificiale, per i migliori risultati
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti
Siamo volati fino a Belfast, capitale dell'Irlanda Del Nord, per scoprire il nuovo Realme 15 Pro 5G Game Of Thrones Limited Edition. Una partnership coi fiocchi, quella tra Realme e HBO, un esercizio di stile davvero ben riuscito. Ma vi raccontiamo tutto nel nostro articolo
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
Il Gigabyte Gaming A16 offre un buon equilibrio tra prestazioni e prezzo: con Core i7-13620H e RTX 5060 Laptop garantisce gaming fluido in Full HD/1440p e supporto DLSS 4. Display 165 Hz reattivo, buona autonomia e raffreddamento efficace; peccano però le USB e la qualità cromatica del pannello. Prezzo: circa 1200€.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-02-2012, 12:04   #1
tomjones23
Senior Member
 
Iscritto dal: Feb 2009
Messaggi: 459
Problema programma in C

Salve,
questo è il programma che devo scrivere in linguaggio C:

Un esploratore deve entrare in un labirinto di stanze, connesse tra loro da corridoi. In ciascuna stanza si trova un certo numero di oggetti di valorearcheologico. Il labirinto si compone di N stanze, numerate a partire da 1 e di M corridoi, anch'essi numerati a partire da 1. L'esploratore entra nella stanzaindicata dal numero S e, a partire da tale stanza, puo' muoversi liberamente percorrendo qualsiasi corridoio in entrambe le direzioni, ed entrando in altre stanze. Naturalmente non e' possibile accedere a stanze che non sono collegate tramite una sequenza di corridoi alla stanza di partenza. Il vostro compito èscrivere un programma che calcoli il numero R di oggetti che l'esploratore può raccogliere muovendosi nel labirinto. Il programma acquisisce in ingresso un testo formato da N+M+1 righe. La prima riga contiene una tripla di interi, separati da uno spazio: l'intero positivo N che indica il numero di stanze, l'intero positivo M che indica il numero di corridoi e l'intero positivo S che indica la stanza di partenza. Ognuna delle successive N righe contiene un numero intero positivo pari alla quantità di oggetti contenuti in una stanza: la i-esima di tali righe contiene la quantità di oggetti nella stanza di indice i. Ognuna delle successive M righe contiene una coppia di interi I e J, compresi tra 1 e N, separati da uno spazio; la coppia rappresenta un corridoio che collega la stanza I con la stanza J. Il risultato del programma deve essere scritto in forma di testo. Tale testo deve contenere in un'unica riga, il numero T e niente altro. Si assuma 1 < N < 100, 1 <= S < 100, 1 <= M < 10000, e che ogni stanza contenga al più 10 oggetti.


Ho già scritto in c INPUT e OUTPUT da/a file, ma non riesco a trovare un modo per confrontare quali sono le stanze che si possono collegare a quella da cui parte l'esploratore e quali no, ho provato a fare dei disegni di esempio ma non capisco lo stesso come implentare un algoritmo.

Spero mi possiate aiutare
Grazie
tomjones23 è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2012, 21:37   #2
Filly95
Senior Member
 
L'Avatar di Filly95
 
Iscritto dal: Jan 2009
Città: Milano
Messaggi: 449
Parto dal presupposto che sto imparando il C. Così a occhio ti posso dire che conviene utilizzare la programmazione dinamica, ma visto che gli oggetti non hanno un valore particolare per cui devi recuperare quelli "migliori", potresti muoverti con un approccio greedy. Questo pdf mi ha aiutato molto: http://81.208.32.83:8080/ioi/files/G...rritoriali.pdf

EDIT: Ho detto una cazzata, per questo problema meglio grafi come ha detto demos88. Nel pdf linkato sopra sono spiegati abbastanza bene.
__________________
Intel i5 2500k | Arctic Cooling Freezer i30 | Asrock Z68 Extreme 3 Gen 3 | Lancool PC-K62 | Corsair TX750M | MSI nVidia GTX 560 Ti Twin Frozr II | Corsair Vengeance LP Black 1600MHz 2x4GB | Crucial M4 128GB | Western Digital Elements 1TB | Seagate 500GB | Cooler Master Spawn | Logitech G110
Concluso positivamente con: massimo3550!

Ultima modifica di Filly95 : 13-02-2012 alle 22:54.
Filly95 è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2012, 22:48   #3
demos88
Senior Member
 
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
A occhio direi che a livello astratto il problema da risolvere è l'identificazione della componente connessa di un grafo potenzialmente non connesso a partire dal nodo di partenza e il conto di tutti gli oggetti presenti nei nodi connessi. I dati di input in tuo possesso costituiscono la matrice di adiacenza relativa al grafo.
Se hai capito quello che ho scritto sopra, penso che tu abbia la risposta in tasca: una volta che definisci che una stanza corrisponde a un nodo e un corridoio a un arco bidirezionale, sommi gli oggetti contenuti in tutti i nodi del sottografo connesso che contiene il nodo di partenza. Altrimenti devi studiarti un po' di teoria dei grafi, o pensarla in modo diverso (al momento non mi viene in mente nulla).
Mi pare che sia l'algoritmo di Tarjan quello che permette la definizione del sottografo (fortemente) connesso. E' passato un po' di tempo dall'esame di Dati e Algoritmi quindi potrei ricordare male.
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight
demos88 è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2012, 09:40   #4
tomjones23
Senior Member
 
Iscritto dal: Feb 2009
Messaggi: 459
Ok ho capito. Purtroppo l'esame che devo fare è di programmazione in C e quello di algoritmi e strutture dati ancora non lo seguo quindi non conosco questi algoritmi ecco perchè credo che in questo esempio non ci sia proprio tutto l'algoritmo di ricerca nei grafi ecco perchè ho pensato di creare queste due strutture:

Codice:
struct corridoio {
     int I;
     int J;
     };  

struct stanza {
     int numero_oggetti; // numero oggetti
     bool gia_visitato; 
     struct corridoio elenco_corridoi [ 10000 ];
     };
a quel punto siccome il corridoio, come dice il testo, è formato da una coppia di interi (I e J) dove il primo numero indica una stanza e il secondo indica un'altra stanza ad essa collegata, allora per trovare quale stanza l'esploratore può raggiungere, e quindi contarne gli oggetti dentro, basta cercare con un for quali stanze (strutture) hanno la I uguale alla stanza di partenza S (I==S) e a quel punto la flag "gia_visitato" di quella stanza andrà a "true" (anche se questa ultima parte mi sembra superflua).
Può essere corretto?
tomjones23 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Dreame Aqua10 Ultra Roller, la pulizia di casa con un rullo Dreame Aqua10 Ultra Roller, la pulizia di casa c...
Recensione Realme 15 Pro Game Of Thrones: un vero cimelio tech per pochi eletti Recensione Realme 15 Pro Game Of Thrones: un ver...
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Lapt...
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Horizon vs Light of Motiram, si entra ne...
Atari rilancia Intellivision Sprint e fa...
Leapmotor lancia in Italia il SUV elettr...
QNAP punta sempre più in alto con...
Scandalo ibride plug-in: consumano come ...
L'intelligenza artificiale fa sempre pi&...
Oracle dal punto di vista dell’Europa: l...
James Dyson Award 2025: dall'accessibili...
Xiaomi: gli smartphone con display poste...
Final Fantasy 7 Remake Part 3 offrir&agr...
Chery presenta Omoda 4, da benzina a ele...
TSMC alza i prezzi: Qualcomm e MediaTek ...
Una Offline Room per aiutare gli student...
Partnership EOLO-Qualcomm: connettivit&a...
Fanatec senza freni: ufficiali il nuovo ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:17.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v