bfs
bfs題目,要求最短路徑下最大得分。
由於基礎不紮實,我坑坑窪窪的打出了bfs求最短路徑,**如下:
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define inf 0x3f3f3f3f
#define pi acos(-1.0)
#define n 510
int n,m,start,end;
int v[n],vis[n];
int g[n][n];
struct yuan
;void bfs_slove()
else
q.push(next);}}
}}int main()
bfs_slove();
return
0;}
學習如何在,bfs求最短路徑上,求最大得分呢?最開始我想先求出最大路徑後,返回再計算比較最大得分記錄。但是這樣太麻煩,我們可以用優先佇列來排好最優解。**如下:
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define inf 0x3f3f3f3f
#define pi acos(-1.0)
#define n 510
int n,m,start,end;
int v[n],vis[n];
int g[n][n];
struct yuan
};void bfs_slove()
for(int i = 0; i < n; i++)}}
}int main()
bfs_slove();
return
0;}
dijk
這題其實完全可以用迪傑斯特拉來計算最短路來做。
先隨手打個dijk模板,**如下
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define inf 0x3f3f3f3f
#define pi acos(-1.0)
#define n 510
int n,m,start,end;
int v[n],dis[n],vis[n];
int g[n][n];
void init()
}}void map()
}void dijk()
}if(min == inf)
break;
vis[next] = 1;
for(int j = 0; j < n; j++)
}}int main()
現在我們需要再考慮最大得分,需要乙個記錄最大分值的陣列,以及在路長相同時取最大得分。**如下
#include
#include
#include
#include
#include
#include
using namespace std;
#define inf 0x3f3f3f3f
#define pi acos(-1.0)
#define n 510
int n,m,start,end;
int v[n],dis[n],low[n],vis[n];
int g[n][n];
void init()
}}void map()
}void dijk()
if(!vis[j] && dis[j] == min && maxn < low[j])
}if(min == inf)
break;
vis[next] = 1;
for(int j = 0; j < n; j++)
if(!vis[j] && dis[j]==dis[next]+g[next][j] && low[j]next]+v[j])
low[j] = low[next] + v[j];}}
}int main()
51NOD1459 迷宮遊戲
1459 迷宮遊戲 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 你來到乙個迷宮前。該迷宮由若干個房間組成,每個房間都有乙個得分,第一次進入這個房間,你就可以得到這個分數。還有若干雙向道路鏈結這些房間,你沿著這些道路從乙個房間走到另外乙個房間需要一些時間。遊戲規定了你的...
51Nod 1459 迷宮遊戲
你來到乙個迷宮前。該迷宮由若干個房間組成,每個房間都有乙個得分,第一次進入這個房間,你就可以得到這個分數。還有若干雙向道路鏈結這些房間,你沿著這些道路從乙個房間走到另外乙個房間需要一些時間。遊戲規定了你的起點和終點房間,你首要目標是從起點盡快到達終點,在滿足首要目標的前提下,使得你的得分總和盡可能大...
51NOD 1459 迷宮遊戲
1459 迷宮遊戲 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 你來到乙個迷宮前。該迷宮由若干個房間組成,每個房間都有乙個得分,第一次進入這個房間,你就可以得到這個分數。還有若干雙向道路鏈結這些房間,你沿著這些道路從乙個房間走到另外乙個房間需要一些時間。遊戲規定了你的...