啊哈算法 最小转机(图的广度优先遍历)

来源:互联网 发布:数据库的三范式 编辑:程序博客网 时间:2024/04/30 18:50
//图的广度优先遍历更适用于所有边的权值相等#include <stdio.h>#include <stdlib.h>#define INF 100000struct node{    int num;//城市编号    int time;//转机次数};struct node queue[100];int head=0;int tail=0;int map[100][100];int book[100];//标记int n,m;int start,end;int main(){    scanf("%d%d",&start,&end);    scanf("%d%d",&n,&m);    for(int i=1;i<=n;i++){        for(int j=1;j<=n;j++){            if(i==j)                map[i][j]=0;            else                map[i][j]=INF;        }    }    for(int i=1;i<=m;i++){       int a,b;       scanf("%d%d",&a,&b);       map[a][b]=1;       map[b][a]=1;    }    book[start]=1;    queue[tail].num=start;    queue[tail].time=0;    tail++;    while(head<tail){        if(queue[head].num==end){            printf("%d\n",queue[head].time);            break;        }        for(int i=1;i<=n;i++){            if(book[i]==0&&map[queue[head].num][i]==1){                book[i]=1;                queue[tail].num=i;                queue[tail].time=queue[head].time+1;                tail++;            }        }        head++;    }    return 0;}

1 0
原创粉丝点击