兩道分層圖,所以我放在一起了=-=
別人都是對狀態直接bfs了,我是對每個狀態編號、建圖,然後跑spfa。(感覺直接bfs好像會快一點,找時間學習一波qwq)
關於編號的注意事項就是不同點的編號一定不能重複,不然就會出現各種奇奇怪怪的錯誤。(血的教訓啊...)
孤島營救:
1 #include2 #include3 #include4 #include5 #include6#define ll long long
7#define ri register int
8using
namespace
std;
9const
int inf = 0x7ffffff;10
const
int n = 10 + 2;11
const
int cc = 100 + 10;12
const
int m = 1e6 + 10;13
const
int nn = 1e6 + 10;14
15const
int cx = ;
16const
int cy = ;
1718 inline int
read()
26struct
edge e[m] ;
29int n, m, p, k, t ; int
head[nn], dis[nn] ;
30int noo[n][n][n][n] ; //
11表示牆,其他數字表示鑰匙
31 inline void add_edge(int x,int y,int
vv)
3536 inline void
spfa() 50}
51}52 inq[x] = 0;53
}54if(dis[t] == inf) printf("-1"
) ;55
else printf("%d"
,dis[t]) ;56}
5758
intmain() else noo[x1][y1][x2][y2] = noo[x2][y2][x1][y1] =ii ;66}
67for(int s=0;s<(1
<) 78}
79}80}
81int nn =read() ;
82for(int i=1;i<=nn;i++) 89}
90}91for(int s=0;s<(1
<0
) ;92
spfa() ;
93return0;
94 }
汽車加油行駛:
1 #include2 #include3 #include4 #include5 #include6#define ll long long
7#define ri register int
8using
namespace
std;
9const
int inf = 0x7ffffff;10
const
int cc = 1e4 + 100;11
const
int n = 100 + 10;12
const
int nn = 1e6 + 10;13
const
int m = 1e6 + 10;14
15const
int cx1 = ;
16const
int cy1 = ;
17const
int cx2 = ;
18const
int cy2 = ;
1920 inline int
read()
28struct
edge e[m] ;
31int n, k, a, b, c, s, t ; int
head[nn], dis[nn] ;
32bool
hh[n][n] ;
33 inline void add_edge(int x,int y,int
vv)
3738 inline void
spfa() 52}
53}54 inq[x] = 0;55
}56 printf("%d"
,dis[t]) ;57}
5859
intmain()
74for(int kk=0;kk<2;kk++)
79 } else
85for(int kk=0;kk<2;kk++) 90}
91//
創造加油站 =-=
92for(int kk=0;kk<2;kk++)
97for(int kk=0;kk<2;kk++)
102}
103}
104}
105for(int i=1;i<=n;i++)
106for(int j=1;j<=n;j++)
113for(int kk=0;kk<2;kk++)
118 } else
124for(int kk=0;kk<2;kk++)
129}
130}
131for(int now=k;now>=0;now--) add_edge(now*cc+n*n,t,0) ; s = k*cc + 1
;132
spfa() ;
133return0;
134 }
汽車加油行駛問題
1.問題描述 給定乙個n n 的方形網格,設其左上角為起點,座標為 1,1 x 軸向右為正,y 軸 向下為正,每個方格邊長為1。一輛汽車從起點出發駛向右下角終點,其座標為 n,n 在若干個網格交叉點處,設定了油庫,可供汽車在行駛途中加油。汽車在行駛過程中應遵守 如下規則 1 汽車只能沿網格邊行駛,裝...
汽車加油行駛問題
給定乙個n n 的方形網格,設其左上角為起點 座標為 1,1 x 軸向右為正,y 軸向下為正,每個方格邊長為1,如圖所示。一輛汽車從起點 出發駛向右下角終點 其 座標為 n,n 在若干個網格交叉點處,設定了油庫,可供汽車在行駛途中加油。汽車在 行駛過程中應遵守如下規則 1 汽車只能沿網格邊行駛,裝滿...
c 汽車加油行駛問題
給定乙個 n n 的方形網格,設其左上角為起點 座標為 1,1 x 軸向右為正,y軸向下為正,每個方格邊長為1。一輛汽車從起點 出發駛向右下角終點 其座標為 n,n 在若干個網格交叉點處,設定了油庫,可供汽車在行駛途中加油。汽車在行駛過程中應遵守如下規則 1 汽車只能沿網格邊行駛,裝滿油後能行駛 k...