• 个人简介

    小号:int sans 、njo sans、nightmare sans、dust sans

    队列:先进先出 队尾进,队头出。 队列操作: 1.入列: q.push(x); 2.出队: q.pop( ); 3.获取队头: q.front( ); 4.获取队尾: q.back( ); 5.判空: q.empty( ); 6.元素个数: q.size( );创建队列: queue 队列名称 <队列元素类型>;

    //邻接表
    #include<bits/stdc++.h>
    using namespace std;
    int vex[1024]={},n,m,v1,v2,q;
    struct node{int to/* 可到达的顶点*/,next/*上一个顶点坐标*/,q/*权*/;} edge[1024];
    int main(){
        //创建邻接表开始
        cin>>n>>m;
        for(int i=1;i<=m;i++){
            cin>>v1>>v2>>q;
            edge[i].to=v2;
            edge[i].q=q;
            edge[i].next=vex[v1];
            vex[v1]=i;
        }
        //创建邻接表结束
    
        //邻接表遍历开始
        for(int i=1;i<=n;i++){ //枚举所有顶点
            cout<<i<<':';
            for(int j=vex[i];j!=0;j=edge[j].next){
                printf("(%d,%d)->", edge[j].to,edge[j].q); //输出顶点
            }
            cout<<endl;
        }
    }
    
    //邻接表
    #include<bits/stdc++.h>
    using namespace std;
    int vex[100005]={},degree[100005]/*度*/,n,m,v1,v2,sum_v=0/*输出顶点个数*/;
    struct node{int to/* 可到达的顶点*/,next/*上一个顶点坐标*/;} edge[1024];//链表
    int tmp[1145140];//输出数据存放数组
    void top_sort(){ //top排序
        stack <int> s;//按照栈的特性进行拓扑排序
        //入度为0的点入栈
        for(int i=1;i<=n;i++){
            if(degree[i]==0) s.push(i);
        }
        //栈不空循环:
        int i=1;
        while(s.size()!=0){
            //获取栈顶存入tmp
            tmp[i]=s.top();
            //sum_v++
            sum_v+=1;
            //出栈
            s.pop();
            //枚举tmp为起点的所有边
            for(int j=vex[tmp[i]];j!=0;j=edge[j].next){
                
                    //将枚举的边入度-1
                    degree[edge[j].to]--;
                    //若-1后入度为0
                    if(degree[edge[j].to]==0){
                        //则该点入栈
                        s.push(edge[j].to);
                    }
                        
                
            }
            i++;
        }
    }
    int main(){
        //创建邻接表开始
        cin>>n>>m;
        for(int i=1;i<=m;i++){
            cin>>v1>>v2;
            edge[i].to=v2;
            edge[i].next=vex[v1];//上一个点的坐标
            degree[v2]++;//终点入度增加
            vex[v1]=i;//标记该点坐标
        }
        //创建邻接表结束
        top_sort();
        if(sum_v==n){
            for(int i=1;i<=n;i++){
                cout<<tmp[i]<<' ';
            }
        }
        else cout<<" has cicle";
    }
    
  • 通过的题目

  • 最近活动

题目标签

初窥门径
4
顺序结构
4
月赛语法
2
条件分支
1
字符串
1