软件工程日报--计算车票价格APP(最短路算法)
在上周的测验中,我们要计算车票价格,让我重新温习了数据结构的两种算法
1.宽度优先搜索
使用宽度优先搜索可以找到,边权值相同的点的最短距离
2.迪杰斯特拉算法
使用这个算法可以用n^2的时间复杂度计算最短距离
模版
#include<string.h>
#include<iostream>
using namespace std;
#define N 150
typedef pair<int,int> P;
int n,m,A[N][N],d[N][N];
P pt[N*N];
int dx[4]={0,0,-1,1},dy[4]={1,-1,0,0};
int bfs(){
int tt=0,hh=0;
memset(d,-1,sizeof(d));
d[0][0]=0;
pt[0]={0,0};
while(hh<=tt){
auto t=pt[hh++];
for(int i=0;i<4;i++){
if(t.first+dx[i]>=0
&&t.second+dy[i]>=0
&&t.first+dx[i]<n
&&t.second+dy[i]<m
&&d[t.first+dx[i]][t.second+dy[i]]==-1
&&A[t.first+dx[i]][t.second+dy[i]]==0){
d[t.first+dx[i]][t.second+dy[i]]=d[t.first][t.second]+1;
pt[++tt]={ t.first+dx[i],t.second+dy[i]};
}
}
}
return d[n-1][m-1];
}
int main(){
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++)
scanf("%d",&A[i][j]);
}
cout<<bfs();
return 0;
}
#include<iostream>
#include<cstring>
using namespace std;
const int N=120;
#define INF 0x3f3f3f3f
int pa[N][N],back[N][N];
int dis[N];
bool st[N];
int n,m,a,b,c;
int djstra(int b){
dis[b]=0;
for(int i=0;i<n;i++){
int t=-1;
for(int j=1;j<=n;j++){
if(!st[j]&&(t==-1||dis[t]>dis[j])){
t=j;
}
}
st[t]=true;
// if(dis[t]==INF)break;
for(int j=1;j<=n;j++){
if(!st[j]&&dis[j]>dis[t]+pa[t][j]){
dis[j]=dis[t]+pa[t][j];
}
}
}
int ma=-1;
for(int i=1;i<=n;i++){
ma=max(ma,dis[i]);
}
return ma;
}
int main(){
cin>>n>>m;
memset(pa,0x3f,sizeof pa);
for(int i=0;i<m;i++){
cin>>a>>b>>c;
pa[a][b]=c;
pa[b][a]=c;
}
int res=INF;
memset(st,0,sizeof st);
memset(dis,0x3f,sizeof dis);
res=djstra(1);
cout<<res;
return 0;
}

浙公网安备 33010602011771号