題目鏈結
思路:1.使用雜湊表將字串轉化為圖的頭結點的下標,並且在圖的頭結點中另外儲存作為此點到起點的最短距離min_dis、最大殺敵數max_enemies、最長路徑長max_len以及從起點出發到達此點的最多路徑cnt的下標.
2.使用dijkstra演算法求取最短路.
#include
#include
#include
#include
#include
#include
using
namespace std;
const
int max =
2e2+3;
const
int inf =
0x7ffffff
;const
int min =0;
int cnt[max]
;int num;
struct point
point()
;};struct head
head()
;};int size, n;
int k;
//頭結點中儲存下標
char pre[max][4
];//前接點
int max_enemies[max]
;int min_dis[max]
;int max_len[max]
;bool done[max]
;point* heap[max]
;//在堆排序時移動指標
vector>e[max]
;//圖
intfind
(int x)
;//尋找大於容量的第乙個素數
inthash_table
(char
* tmp)
;//雜湊
void
insert
(point* tmp)
;//最小堆的插入
point*
delete()
;//從最小堆中刪除並取得堆頂最小元素
void
dijkstra
(char
* s,
char
* e)
;bool
cmp(point* a, point* b)
;void
init
(char
* s)
;void
print_path
(char
* end)
;//列印路徑
head*
find_pos
(int hash,
char
* name)
;//根據雜湊值找到頭結點
intmain()
for(
int i =
0; i < m; i++
)dijkstra
(start, end)
;print_path
(end)
;int end_pos =
find_pos
(hash_table
(end)
, end)
->pos;
printf
("\n%d %d %d"
, cnt[end_pos]
, min_dis[end_pos]
, max_enemies[end_pos]);
}int
find
(int x)
if(j ==
(int
)sqrt
(i)+1)
return i;}}
inthash_table
(char
* tmp)
return
(sum &
0x7fffffff
)% num;
}void
insert
(point* tmp)
point*
delete()
heap[parent]
= tmp;
return max;
}void
dijkstra
(char
* s,
char
* e)
;insert
(head)
;while
(size)
else
if(min_dis[v-
>pos]
== min_dis[t-
>pos]
+ tmp-
>dis)
else
if(max_len[v-
>pos]
== max_len[t-
>pos]+1
)}}}
}}bool
cmp(point* a, point* b)
void
init
(char
* s)
min_dis[h-
>pos]=0
; cnt[h-
>pos]=1
;strcpy
(pre[h-
>pos]
, s);}
head*
find_pos
(int hash,
char
* name)
void
print_path
(char
* end)
}
直搗黃龍 (30 分)
本題是一部戰爭大片 你需要從己方大本營出發,一路攻城略地殺到敵方大本營。首先時間就是生命,所以你必須選擇合適的路徑,以最快的速度占領敵方大本營。當這樣的路徑不唯一時,要求選擇可以沿途解放最多城鎮的路徑。若這樣的路徑也不唯一,則選擇可以有效殺傷最多敵軍的路徑。輸入第一行給出2個正整數n 2 n 200...
L3 011 直搗黃龍
本題是一部戰爭大片 你需要從己方大本營出發,一路攻城略地殺到敵方大本營。首先時間就是生命,所以你必須選擇合適的路徑,以最快的速度占領敵方大本營。當這樣的路徑不唯一時,要求選擇可以沿途解放最多城鎮的路徑。若這樣的路徑也不唯一,則選擇可以有效殺傷最多敵軍的路徑。輸入格式 輸入第一行給出2個正整數n 2 ...
直搗黃龍 Dijkstra map 列印路徑
本題是一部戰爭大片 你需要從己方大本營出發,一路攻城略地殺到敵方大本營。首先時間就是生命,所以你必須選擇合適的路徑,以最快的速度占領敵方大本營。當這樣的路徑不唯一時,要求選擇可以沿途解放最多城鎮的路徑。若這樣的路徑也不唯一,則選擇可以有效殺傷最多敵軍的路徑。輸入格式 輸入第一行給出2個正整數n 2 ...