<prompt> Unda programu ya Rust inayokokotoa njia fupi zaidi kati ya nodi mbili katika grafu yenye uzito, isiyoelekezwa kwa kutumia algoriti ya Dijkstra. Grafu inapaswa kuwakilishwa kama matrix ya karibu inayosomwa kutoka kwa faili ya maandishi. Programu inapaswa kuchukua hoja za mstari wa amri kwa njia ya faili ya ingizo na vitambulisho vya nodi ya chanzo na lengwa, na kutoa njia fupi zaidi pamoja na jumla ya uzito wake.  <response>: Hapa kuna programu ya Rust ambayo huhesabu njia fupi kati ya nodi mbili kwenye grafu iliyo na uzani, isiyoelekezwa kwa kutumia algoriti ya Dijkstra. Grafu inawakilishwa kama matriki ya karibu inayosomwa kutoka kwa faili ya maandishi.kututumia std::env;tumia std::fs::Faili;tumia std::io::BufRead, BufReader;tumia std::tumia;fn kuu let args: Vec env::args.kusanya; if args.len ! 4 eprintln!Matumizi: , args0; kurudi; let input_file args1; acha source_node_id: usize args2.parse.tarajiaKitambulisho batili cha nodi ya chanzo; acha destination_node_id: usize args3.parse.tarajiaKitambulisho batili cha nodi lengwa; acha grafu read_graph_from_fileinput_file.expectHitilafu ya kusoma grafu kutoka kwenye faili; let njia_fupi_fupi, uzani_jumla dijkstragrafu, kitambulisho_cha_chanzo, kitambulisho_cha_cha_cha_cha_chanzo_kipimo_kipimo; chapa! Njia fupi zaidi: :?nJumla ya uzito: , njia_fupi zaidi, uzito_jumla ;fn read_graph_from_filefile_path: str - Matokeo, Box acha faili Faili::funguafile_path?; acha msomaji BufReader ::mpyafaili; let mut graph vec!; kwa mstari katika reader.lines acha mstari mstari?; acha safu: Vec line.split_whitespace .ramanix x.parse.unwrap .kusanya; grafu.sukumasafu; Sawa grafufn dijkstra grafu: Vec, kitambulisho_cha_nodi: tumia, kitambulisho_cha_cha_marudio: tumia, - Vec, tumia let n grafu.len; let mut visited vec!false; n; let mut distances vec!usize::MAX; n; let mut previous_nodes vec!Hakuna; n; umbalisource_node_id 0; kwa _ kwa 0..n let current_node find_min_distance_nodidistances, visited; ikiwa sasa_nodi lengwa_nodi_id mapumziko; alitembeleacurrent_node kweli; kwa jirani katika 0..n acha uzito grafucurrent_nodijirani; ikiwa uzito 0 !alitembeleajirani acha new_distance masafacurrent_nodi.kueneza_kuongezauzito; ikiwa new_distance masafa jirani umbalijirani new_distance; uliopita_nodijirani Somecurrent_nodi; acha njia_fupi_fupi reconstruct_pathnodi_zilizopita, kitambulisho_cha_chanzo, kitambulisho_cha_kipimo; acha jumla_uzito umbalidestination_nodi_id; njia_fupi zaidi, uzito_jumlafn find_min_distance_nodiumbali: usize, uliotembelewa: bool - tumia let mut min_distance usize::MAX; let mut min_index 0; kwa index, distance, is_visited katika distances.iter.zipvisited.enumerate ikiwa !imetembelewa umbali min_distance min_distance umbali; min_index index; min_indexfn reconstruct_path nodi_ zilizopita: Vec, kitambulisho_cha_nodi: tumia, kitambulisho_cha_cha_marudio: tumia, - Vec let mut path vec!; let mut current_nodi destination_nodi_id; wakati current_nodi ! source_nodi_id path.sukumanodi_ya_sasa; sasa_nodi nodi_zilizotanguliacurrent_nodi.unwrap; path.pushchanzo_nodi_id; njia.reverse; njiaIli kuendesha programu, ihifadhi kama dijkstra.rs na uikusanye kwa kutumia rustc dijkstra.rs. Kisha, unaweza kutekeleza binary iliyojumuishwa na njia ya faili ya kuingiza na vitambulisho vya nodi ya chanzo na lengwa:sh .dijkstra input.txt 0 4Njia fupi zaidi: 0, 2, 3, 4Jumla ya uzito: 9Faili ya ingizo inapaswa kuwa na matriki ya mkabala wa grafu, ambapo kila safu mlalo ni orodha ya uzani iliyotenganishwa na nafasi. Kwa mfano, faili ifuatayo ya ingizo inawakilisha grafu yenye nodi tano 0-4 na kingo zenye uzani kati yao:0 10 1 0 010 0 0 5 11 0 0 2 00 5 2 0 20 1 0 2 0 