問題描述
小明在玩乙個電腦遊戲,遊戲在乙個n×m的方格圖上進行,小明控制的角色開始的時候站在第一行第一列,目標是前往第n行第m列。
方格圖上有一些方格是始終安全的,有一些在一段時間是危險的,如果小明控制的角色到達乙個方格的時候方格是危險的,則小明輸掉了遊戲,如果小明的角色到達了第n行第m列,則小明過關。第一行第一列和第n行第m列永遠都是安全的。
每個單位時間,小明的角色必須向上下左右四個方向相鄰的方格中的乙個移動一格。
經過很多次嘗試,小明掌握了方格圖的安全和危險的規律:每乙個方格出現危險的時間一定是連續的。並且,小明還掌握了每個方格在哪段時間是危險的。
現在,小明想知道,自己最快經過幾個時間單位可以達到第n行第m列過關。
輸入格式
輸入的第一行包含三個整數n, m, t,用乙個空格分隔,表示方格圖的行數n、列數m,以及方格圖中有危險的方格數量。
接下來t行,每行4個整數r, c, a, b,表示第r行第c列的方格在第a個時刻到第b個時刻之間是危險的,包括a和b。遊戲開始時的時刻為0。輸入資料保證r和c不同時為1,而且當r為n時c不為m。乙個方格只有一段時間是危險的(或者說不會出現兩行擁有相同的r和c)。
輸出格式
輸出乙個整數,表示小明最快經過幾個時間單位可以過關。輸入資料保證小明一定可以過關。
樣例輸入
3 3 3
2 1 1 1
1 3 2 10
2 2 2 10
樣例輸出
6樣例說明
第2行第1列時刻1是危險的,因此第一步必須走到第1行第2列。
第二步可以走到第1行第1列,第三步走到第2行第1列,後面經過第3行第1列、第3行第2列到達第3行第3列。
評測用例規模與約定
前30%的評測用例滿足:0 < n, m ≤ 10,0 ≤ t < 99。
所有評測用例滿足:0 < n, m ≤ 100,0 ≤ t < 9999,1 ≤ r ≤ n,1 ≤ c ≤ m,0 ≤ a ≤ b ≤ 100。
題目中給的資料非常小,a和b小於100意味著100秒之後所有的方塊一定都是安全的,再加上n和m也小於100,
所以總共不會超過300*100*100=3000000個狀態,直接廣搜即可
#include#includeusing namespace std;
typedef struct
state;
typedef struct
dead;
dead s[105][105] = ;
state temp, now;
int flag[105][105][305] = , dir[4][2] = ;
queueq;
int main(void)
now.x = now.y = 1, now.t = 0;
q.push(now);
while(q.empty()==0) }
printf("%d\n", now.t);
return 0;
}
第七次作業
磁碟管理和維護 磁碟檔名 dev sd a p 1 128 dev hd a p 1 128 dev vd a p 1 128 heads 磁面 sectors track 扇區 cylinders磁柱 分割槽命令 fdisk dev sd 格式化 mkfs.ext4 dev sda mkfs.xf...
第七次試驗
include include include include include include using namespace std define maxsize 100 typedef char elemtype typedef struct sqqueue void initqueue sqq...
第七次作業
共有一下六步 1.客戶機提出網域名稱解析請求,並將該請求傳送給本地的網域名稱伺服器。2.當本地的網域名稱伺服器收到請求後,就先查詢本地的快取,如果有該紀錄項,則本地的網域名稱伺服器就直接把查詢的結果返回。3.如果本地的快取中沒有該紀錄,則本地網域名稱伺服器就直接把請求發給根網域名稱伺服器,然後根網域...