如圖所示:求從某一點到某一點的最短路徑
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>