圖(最短路徑)

如圖所示:求從某一點到某一點的最短路徑

dfs解題方法:

<span style="font-size:18px;">#include<stdio.h>
#define MAX 999999
int book[50]={0},p[50][50];
int min=9999,end;
int v,s;
void bfs(int b,int dis)//dis是路徑長度
{
	if(b==end)//當到終點的時候,更新min
	{
		if(dis<min)
		{
			min=dis;
		} 
		
		return ;
	}
	for(int k=1;k<=v;k++)
	{
		if(book[k]==0&&(p[b][k]>0&&p[b][k]<MAX))
		{
			
			book[k]=1;
			bfs(k,dis+p[b][k]);
			book[k]=0;//回溯(很重要)
		}
	}
}
int main(void)
{
	int x,y,value,begin;
	scanf("%d%d",&v,&s);//輸入頂點和邊
	for(int i=1;i<=v;i++)
	for(int j=1;j<=v;j++)
	{
		p[i][i]=0;
		p[i][j]=MAX;
	}
	for(int k=1;k<=s;k++)
	{
		scanf("%d%d%d",&x,&y,&value);//輸入頂點和邊和權值
		p[x][y]=value;
	}
	scanf("%d%d",&begin,&end);
	book[begin]=1; //標記第一個頂點
	bfs(begin,0);//開始的時候路長爲 0 
	printf("%d\n",min);
	return 0;
} </span>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章