基礎實驗8 1 2 直搗黃龍

2021-10-19 23:02:35 字數 2781 閱讀 7854

題目鏈結

思路: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 ...