软件工程日报--计算车票价格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;
}
posted @ 2025-03-19 23:39  元始天尊123  阅读(39)  评论(0)    收藏  举报