欢迎使用本站,预祝练习时长两年半的选手们到成功! [本模块信息来自tem/def/head]

yzo sgyq 图

时间:2024-05-19 13:28 作者:admin 点击:
一对一:链表 一对多:树 多对多:图 图中的点:顶点 图中点与点连接的线:边 一个顶点周围连接着多少边叫做度 一个图包含多少个顶点叫做图的阶 一个五阶图,表示这个图包含5个


一对一:链表

一对多:树

多对多:图


图中的点:顶点

图中点与点连接的线:边


一个顶点周围连接着多少边叫做度


一个图包含多少个顶点叫做图的阶

一个五阶图,表示这个图包含5个顶点


在图中,如果一条边的两端顶点互通,无向边

在无向图中,任意两个顶点存在相连的途径,连通图

如果是有向图,通常需要相互有途径,不能单向


存链表:指针

存树:指针和数组(完全二叉树结构)

存图:邻接矩阵,邻接表


无向图例子

输入:顶点数量n,边数m,接下来输入m行数据

每行三个整数,分别代表两个点的编号(从1开始)和他们之间的具体

再输入一个顶点编号x

5 7

1 2 5

2 3 7

1 3 4

2 5 6

3 5 8

4 1 2

4 5 3

x

输出:

x点的相邻的顶点数量,并按照从近到远输出顶点编号

struct node{

   int num;

   int line;

} k[1000];

bool cmp(node a,node b){

   if(a.line==b.line) return a.num<b.num;

   return a.line<b.line;

}

int t[100][100];

int n,m,x,a,b,l;

int main(){

   cin>>n>>m;

   for(int i=0;i<m;i++){

       cin>>a>>b>>l;

       t[a][b]=t[b][a]=l;

       t[0][b]++;

       t[a][0]++;

   }

   cin>>x;

   cout<<t[0][x]<<endl;

   int j=0;

   for(int i=1;i<=n;i++){

       if(t[i][x]!=0){

           k[j].num=i;

           k[j].line=t[i][x];

           j++;

       }

   }

   sort(k,k+j,cmp);

   for(int i=0;i<j;i++){

       cout<<k[i].num<<" ";

   }

   return 0;

}



dfs(){

   if(能走) dfs

   if(能走) dfs

   if(能走) dfs

   if(能走) dfs

}


bfs(){

   入队

   while(队不空){

       队头

           陆续入队

       出队

   }

}


dfs 栈(递归) 有返回(回溯) 判断是否有解

bfs 队列      无返回(回溯) 判断最优解


作业:

输入一个图

输入一个顶点

按照dfs和bfs的方案,从这个顶点开始,输出遍历的顺序

(责任编辑:admin)
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%