時間限制最短路徑演算法有三種,floyd,dijkstra,bellman_ford.其中,floyd適合用於計算每兩點間的路徑,dijkstra適合稀疏圖,bellman則適合稠密圖中的已知起點終點,計算最短路徑的問題.時間複雜度,floyd演算法為n立方,dijk為n平方,bellman為n平方,其中n是點數.dijk可用堆維護,時間複雜度可減至nlogn,而bellman可用佇列維護,此方法於2023年被國人提出,命名比較土鱉叫spfa(shortest path faster algorithm.).至於如何計算,有了名字,搜一下就ok.
需要出具體路徑的廣搜題
描述定義乙個二維陣列:
int maze[5][5] = ;
它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。
輸入乙個5 × 5的二維陣列,表示乙個迷宮。資料保證有唯一解。
輸出左上角到右下角的最短路徑,格式如樣例所示。
樣例輸入
0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
樣例輸出
(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)
#include #include using namespace std;
int maze[7][7], pre[30], vis[30];
int dir[4][2] = ,,,};
bool isleagal ( int r, int c )
void print ( int des )
void bfs ()
} }}
int main()
不需要路徑但是要判斷連通度,考慮並查集方法,題在下面,通過結構體道路數組建圖
#include #include using namespace std;
int visit[510];
int f[510];
struct road
;struct road p[5100];
int find1(int x)
else return x;
}void merg(int x,int y)
return ;
}int main()
if(u == d) return;
vis[u] = 1;
for(int v = 0; v < n; ++v)
else if(dis[0][v] == dis[0][u]+mp[u][v] && dis[1][v] < dis[1][u]+1)
else if(dis[0][v] == dis[0][u]+mp[u][v] && dis[1][v] == dis[1][u]+1 && dis[2][v] < dis[2][u]+val[v])
else if(dis[0][v] == dis[0][u]+mp[u][v]) cnt[v] += cnt[u];
} }}void prt(int u)
}int main()
} int w,uu,vv;
memset(mp,inf,sizeof(mp));
while(m--)
dijkstra();
prt(1);
puts("");
printf("%d %d %d\n",cnt[1],dis[0][1],dis[2][1]);
return 0;
}
200 ms
記憶體限制
65536 kb
**長度限制
8000 b
判題程式
standard
作者
陳越
作為乙個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連線城市的快速道路。每個城市的救援隊數量和每一條連線兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助**給你的時候,你的任務是帶領你的救援隊盡快趕往事發地,同時,一路上召集盡可能多的救援隊。
輸入格式:
輸入第一行給出4個正整數n、m、s、d,其中n(2<=n<=500)是城市的個數,順便假設城市的編號為0~(n-1);m是快速道路的條數;s是出發地的城市編號;d是目的地的城市編號。第二行給出n個正整數,其中第i個數是第i個城市的救援隊的數目,數字間以空格分隔。隨後的m行中,每行給出一條快速道路的資訊,分別是:城市1、城市2、快速道路的長度,中間用空格分開,數字均為整數且不超過500。輸入保證救援可行且最優解唯一。
輸出格式:
第一行輸出不同的最短路徑的條數和能夠召集的最多的救援隊數量。第二行輸出從s到d的路徑中經過的城市編號。數字間以空格分隔,輸出首尾不能有多餘空格
/*dijkstra模板,可以計算最短路的長度,結果儲存在dis中;
如果有多條最短路,可以計算最短的條數,結果儲存在num中;
同時利用字首陣列記錄最短路的路徑,輸出利用棧(stack);
a陣列表示每個點的權值,要求最後最短路的權值最大,結果儲存在maxx中。
patl2-1. 緊急救援。很不錯大家可以理解試一試,最重要的是理解。
*/#include #include #include #include #define inf 0x3f3f3f3f
using namespace std;
const int n = 505;
int n,m,s,e;
int map[n][n]; //利用鄰接矩陣儲存圖
int dis[n]; //最短路值
int vis[n]; //標記陣列
int num[n]; //路徑個數
int maxx[n]; //最短路徑最大的權值和
int a[n]; //每個點的權值
int pre[n]; //儲存路徑,記錄前驅
void dij(int start)
} if(t==inf)
vis[k]=1;
for(j=0;jdis[k]+map[k][j])
else if(dis[j]==dis[k]+map[k][j])
printf("\n");
}int main(){
while(~scanf("%d %d %d %d",&n,&m,&s,&e)){
int i,j;
for(i=0;i
php 關於一些路徑問題,實測
document root 即apache配置檔案中指定的documentroot e www script name 從documentroot 根目錄 到本檔案的路徑 當前檔名 test test.php php self 從documentroot 根目錄 到本檔案的路徑 當前檔名 test ...
servlet jsp中的一些路徑問題
一 servlet 可能經常我們需要在servlet中處理一些路徑問題,比如,想得到當前應用中某個檔案的物理路徑,或者需要知道某個請求的具體路徑,這時就需要用到這些方法了。1 獲得web應用的物理絕對路徑 用到了getservletcontext 中的getrealpath 方法,它能夠返回當前we...
servlet jsp中的一些路徑問題
一 servlet 可能經常我們需要在servlet中處理一些路徑問題,比如,想得到當前應用中某個檔案的物理路徑,或者需要知道某個請求的具體路徑,這時就需要用到這些方法了。1 獲得web應用的物理絕對路徑 用到了getservletcontext 中的getrealpath 方法,它能夠返回當前we...