zoukankan      html  css  js  c++  java
  • 数据结构课程设计

    1.电梯模拟。。。乱写的

    View Code
    main.cpp
    
    #include"louzhang.h"
    using namespace std;
    
    CElevator elevator;
    int main(){
        //srand(time(0));
        elevator.run();
        return 0;
    }
    
    louzhang.h
    
    #ifndef LOUZHANG_H
    #define LOUZHANG_H
    
    #include<vector>
    #include<cstdlib>
    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<ctime>
    #include<algorithm>
    #include<Windows.h>
    using namespace std;
    const int max_floor = 20;
    const int max_num = 13;
    const int t = 100;
    class CPerson{
    public:
        CPerson();//构造
        ~CPerson();//析构
    //private:
        int src_floor;//这个人在哪个楼层按了电梯
        int dst_floor;//这个人去哪一层
        int max_wait;//这个人最大等待时间 
        int wait_time;//这个人已经等了多长时间
        int id;//这个人的ID号,即序号
        bool flag;//true is out, and false is in the elevator
    };
    class CElevator{
    public:
        CElevator();
        ~CElevator();
        void run();
        int MAX(int a, int b, int c);//取3个数中最大值
        int MIN(int a, int b, int c);//取3个数中最小值
    //private:
        int now_floor;//电梯当前所在楼层 
        int dst_floor;//电梯所去楼层
        int flag;//标识位,1表示向上,-1表示向下,0表示电梯停留
    };
    
    #endif
    
    louzhang.cpp
    
    #include"louzhang.h"
    extern CElevator elevator;
    vector < CPerson > Person;
    vector < CPerson >::iterator it;
    void CElevator::run(){
        int up = 1;
        int down = max_floor;
        for(int rand_num = 1; rand_num <= 2 * max_floor; rand_num ++){
            CPerson person;
            person.id = rand_num;
            Person.push_back(person);
            printf("第 %d 号乘客在 %d 楼按了电梯......\n", person.id , person.src_floor);
            if(elevator.flag == 0){
                for(int i = 0; i < (int)Person.size(); i++){
                    if(Person[i].src_floor > elevator.now_floor){
                        elevator.flag = 1;
                        elevator.dst_floor = MAX(elevator.dst_floor, Person[i].src_floor, Person[i].dst_floor);
                    }else if(Person[i].src_floor < elevator.now_floor){
                        elevator.flag = -1;
                        elevator.dst_floor = MIN(elevator.dst_floor, Person[i].src_floor, Person[i].dst_floor);
                    }else {
                        if(Person[i].dst_floor >elevator.now_floor){
                            elevator.flag = 1;
                            elevator.dst_floor = Person[i].dst_floor;
                        }else{
                            elevator.flag = -1;
                            elevator.dst_floor = Person[i].dst_floor;
                        }
                        break;
                    }
                }
                if(elevator.flag == 1){
                    elevator.now_floor ++;
                    puts("电梯正在关门......");
                    Sleep(20 * t);
                    puts("电梯在加速......");
                    Sleep(15 * t);
                    puts("电梯正在上升......");
                    Sleep(22 * t);
                    puts("电梯正在减速......");
                    Sleep(14 * t);
                    printf("电梯到达 %d 楼\n\n", elevator.now_floor);
                    for(int i = 0; i < (int)Person.size(); i++){
                        Person[i].wait_time += 71;
                        if(Person[i].wait_time > Person[i].max_wait ){
                            Person.erase(Person.begin() + i);
                            i --;
                        }
                    }
                }
                else{
                    elevator.now_floor --;
                    puts("电梯正在关门......");
                    Sleep(20 * t);
                    puts("电梯在加速......");
                    Sleep(15 * t);
                    puts("电梯正在下降......");
                    Sleep(23 * t);
                    puts("电梯正在减速......");
                    Sleep(23 * t);
                    printf("电梯到达 %d 楼\n\n", elevator.now_floor);
                    for(int i = 0; i < (int)Person.size(); i++){
                        Person[i].wait_time += 81;
                        if(Person[i].wait_time > Person[i].max_wait ){
                            Person.erase(Person.begin() + i);
                            i --;
                        }
                    }
                }
            }else if(elevator.flag == 1){
                if(person.src_floor > elevator.now_floor)
                    elevator.dst_floor = MAX(elevator.dst_floor, person.dst_floor, person.src_floor);    
                int flag = 1;
                int count = 0;
                for(int i = 0; i < (int)Person.size(); i++){
                    if(Person[i].dst_floor == elevator.now_floor && Person[i].flag == false){
                        if(flag){
                            puts("电梯正在开门......");
                            Sleep(20 *t);
                            flag = 0;
                        }
                        count ++;
                        printf("乘客 %d 正从电梯出来......\n", Person[i].id);
                        Sleep(25 *t);
                        Person.erase(Person.begin() + i);
                        i --;
                    }            
                }
                for(it = Person.begin(); it != Person.end(); it ++){
                    if((*it).src_floor == elevator.now_floor && (*it).flag == true){
                        if((*it).dst_floor - (*it).src_floor > 0){
                            (*it).flag = false;
                            if((*it).dst_floor > up )
                                up = (*it).dst_floor;
                            if(flag){
                                puts("电梯正在开门......");
                                Sleep(20 *t);
                                flag = 0;
                            }
                            count ++;
                            printf("乘客 %d 进入电梯......\n", (*it).id);
                            printf("%d 号乘客目的楼层为 %d \n", (*it).id, (*it).dst_floor);
                            Sleep(25 *t);
                        }
                    }
                }
                if(elevator.now_floor != elevator.dst_floor){
                    elevator.now_floor ++;
                    if(flag == 0){
                        puts("没有人进电梯了......");
                        Sleep(40 * t);
                        puts("电梯正在关门......");
                        Sleep(20 * t);
                        puts("电梯在加速......");
                        Sleep(15 * t);
                        puts("电梯正在上升......");
                        Sleep(22 * t);
                        puts("电梯正在减速......");
                        Sleep(14 * t);
                        for(int i = 0; i < (int)Person.size(); i++){
                            Person[i].wait_time += (count * 25) + 20 + 111;
                            if(Person[i].wait_time > Person[i].max_wait ){
                                Person.erase(Person.begin() + i);
                                i --;
                            }
                        }
                    }else{
                        puts("电梯继续上升......");
                        Sleep(51 * t);
                        for(int i = 0; i < (int)Person.size(); i++){
                            Person[i].wait_time += (count * 25) + 20 + 51;
                            if(Person[i].wait_time > Person[i].max_wait ){
                                Person.erase(Person.begin() + i);
                                i --;
                            }
                        }
                    }
    
                    printf("电梯到达 %d 楼\n\n", elevator.now_floor);
                }
                else
                    elevator.flag = 0;
    
            }else {
                if(person.src_floor <elevator.now_floor)
                    elevator.dst_floor = MIN(elevator.dst_floor, person.dst_floor, person.src_floor);    
                int flag = 1;
                int count = 0;
                for(int i = 0; i < (int)Person.size(); i++){
                    if(Person[i].dst_floor == elevator.now_floor && Person[i].flag == false){
                        if(flag){
                            puts("电梯正在开门......");
                            Sleep(20 *t);
                            flag = 0;
                        }
                        count ++;
                        printf("乘客 %d 从电梯出来......\n", Person[i].id);                    
                        Sleep(25 * t);
                        Person.erase(Person.begin() + i);
                        i --;
                    }            
                }
                for(it = Person.begin(); it != Person.end(); it ++){
                    if((*it).src_floor == elevator.now_floor && (*it).flag == true){
                        if((*it).dst_floor - (*it).src_floor < 0){
                            (*it).flag = false;
                            if((*it).dst_floor < down)
                                down = (*it).dst_floor;
                            if(flag){
                                puts("电梯正在开门......");
                                Sleep(20 * t);
                                flag = 0;
                            }
                            count ++;
                            printf("乘客 %d 正在进入电梯......\n", (*it).id);
                            printf("%d 号乘客目的楼层为 %d \n", (*it).id, (*it).dst_floor);
                            Sleep(25 * t);
                        }
                    }
                }
                if(elevator.now_floor != elevator.dst_floor){
                    elevator.now_floor --;
                    if(flag == 0){
                        puts("没有人进电梯了......");
                        Sleep(40 * t);
                        puts("电梯正在关门......");
                        Sleep(20 * t);
                        puts("电梯在加速......");
                        Sleep(15 * t);
                        puts("电梯正在下降......");
                        Sleep(23 * t);
                        puts("电梯正在减速......");
                        Sleep(23 * t);
                        for(int i = 0; i < (int)Person.size(); i++){
                            Person[i].wait_time += (count * 25) + 20 + 121;
                            if(Person[i].wait_time > Person[i].max_wait ){
                                Person.erase(Person.begin() + i);
                                i --;
                            }
                        }
                    }else{
                        puts("电梯继续下降......");
                        Sleep(51 * t);
                        for(int i = 0; i < (int)Person.size(); i++){
                            Person[i].wait_time += (count * 25) + 20 + 51;
                            if(Person[i].wait_time > Person[i].max_wait ){
                                Person.erase(Person.begin() + i);
                                i --;
                            }
                        }
                    }
                    printf("电梯到达 %d 楼\n\n", elevator.now_floor);
                }
                else
                    elevator.flag = 0;
            }
            if(elevator.now_floor == 1)
                break;
        }
        if(elevator.now_floor == 1){
            int flag = 1;
            for(int i = 0; i < (int)Person.size(); i++){
                if(Person[i].dst_floor == elevator.now_floor && Person[i].flag == false){
                    if(flag){
                        puts("电梯正在开门......");
                        Sleep(20 * t);
                        flag = 0;
                    }
                    printf("乘客 %d 正从电梯出来......\n", Person[i].id);
                    Sleep(25 * t);
                    Person.erase(Person.begin() + i);
                    i --;
                }            
            }
        }
    }
    int CElevator::MAX(int a, int b, int c){
        return (a > (b > c ? b : c) ? a : (b > c ? b : c) );
    }
    int CElevator::MIN(int a, int b, int c){
        return (a < (b < c ? b : c) ? a : (b < c ? b : c) );
    }
    
    
    CPerson::CPerson(){
        do{
            src_floor = rand() % max_floor + 1;
        }while(src_floor == elevator.now_floor);
        do{
            dst_floor = rand() % max_floor + 1;
        }while(dst_floor == src_floor || dst_floor == elevator.now_floor);
        max_wait = 1000;
        wait_time = 0;
        flag = true;    
    }
    CPerson::~CPerson(){
        ;
    }
    CElevator::CElevator(){
        now_floor = 1;
        dst_floor = 1;
        flag = 0;
    }
    CElevator::~CElevator(){
        ;
    }

    2.linux文件目录管理模拟器

    View Code
    main.cpp
    
    #include "louzhang.h"
    
    CRun Run;
    int main(){
        puts("welcome to ubuntu 12.04\n\n");    
        Run.run();
        return 0;
    }
    
    louzhang.h
    
    #ifndef LOUZHANG_H
    #define LOUZHANG_H
    
    #include<list>
    #include<vector>
    #include<ctime>
    #include<string>
    #include<cstring>
    #include<iostream>
    #include<queue>
    #include<stack>
    #include<Windows.h>
    using namespace std;
    class CFile{
    public:
        CFile();
        ~CFile();
        string name;
        bool type;//true is directory, and false is file
        string make_time;
        string permissions;//х╗оч, rwx
        int size;
        int num;
        bool hide;//true is hide, ans false is not hide
        vector < CFile * > next;
        CFile *pre;
        friend bool operator < (const CFile &a, const CFile &b){
            return a.make_time < b.make_time;
        }
    };
    class CRun{
    public:
        void run();
        void MKDIR();
        void TOUCH();
        void FIND();
        void CD();
        void REMOVE();
        void SHOW(CFile *p);
        void CRun::DFS(CFile *p, string name, CFile **ans);
        void PWD();
        void LS();
    };
    
    #endif
    
    louzhang.cpp
    
    
    #include "louzhang.h"
    CFile *root = new CFile;//init a root directory
    CFile *now = new CFile;
    #define WRONG system("color 2c");puts("wrong");Sleep(100);system("color 0f");
    void CRun::run(){
        root->name = "root";
        root->type = true;
        root->permissions = "rwx";
        root->size = 0;
        root->num = 0;
        now = root;
        while(now != NULL){
            printf("louzhang$: ");
            string op, name;//op is mkdir, touch, find, rm, cp
            cin>>op;
            if(op == "cd"){
                CD();
                continue;
            }
            if(op == "mkdir"){
                MKDIR();
                continue;
            }
            if(op == "touch"){
                TOUCH();
                continue;
            }
            if(op == "find"){
                FIND();
                continue;
            }
            if(op == "rm"){
                REMOVE();
                continue;
            }
            if(op == "pwd"){
                PWD();
                continue;
            }
            if(op == "ls"){
                LS();
                continue;
            }
            if(op == "exit")
                break;
            WRONG
        }
    }
    
    void CRun::LS(){
        sort(now->next.begin(), now->next.end() );
        char c = getchar();
        if(c == ' '){
            string ss;
            cin>>ss;
            for(int i = 0; i < (int)now->next.size(); i ++){
                CFile *tmp = now->next[i];
                if(tmp->type == true){
                    cout<<"d";
                }else cout<<"-";
                cout<<tmp->permissions<<"  ";
                cout<<tmp->size<<"  ";
                cout<<tmp->num<<"  ";
                cout<<tmp->make_time<<"  ";
                cout<<tmp->name<<endl;
            }
            return;
        }
        for(int i = 0; i < (int)now->next.size(); i ++){
            cout<<now->next[i]->name<<"  ";
        }
        cout<<endl;
    }
    void CRun::REMOVE(){
        char s[100];
        gets(s);
        if(now->next.size() == 0){
            WRONG
                return;
        }
        char op[10], name[100];
        int t = sscanf(s, "%s %s", op, name);
        if(t == 2){
            for(int i = 0; i <(int)now->next.size(); i++){
                if(now->next[i]->name == name){
                    now->next.erase(now->next.begin() + i);
                    return;
                }
            }
            WRONG
        }else{
            strcpy(name, op);
            for(int i = 0; i < (int)now->next.size(); i++){
                if(now->next[i]->name != name) continue;
                if(now->next[i]->type == false){
                    now->next.erase(now->next.begin() + i);
                    return;
                }else{
                    if(now->next[i]->next.size() == 0){
                        now->next.erase(now->next.begin() + i);
                        return;
                    }
                }
            }
            WRONG
        }
    
    
    }
    void CRun::CD(){
        string dir;
        cin>>dir;
        if(dir == ".."){
            if(now == root) return;
            now = now->pre;
            return;
        }
        if(dir == "~"){
            now = root;
            return;
        }
        for(int i = 0; i < (int)now->next.size(); i++){
            if(now->next[i]->name == dir){
                if(now->next[i]->type == true){
                    now = now->next[i];
                    return;
                }
            }
        }
        WRONG
    }
    
    void CRun::SHOW(CFile *p){
        stack < string > q;
        q.push(p->name);
        while(p->pre != NULL){
            q.push(p->pre->name);
            p = p->pre;
        }
        while(!q.empty()){
            cout<<q.top()<<"/";
            q.pop();
        }
        cout<<endl;
    }
    void CRun::PWD(){
        SHOW(now);
    }
    
    void CRun::DFS(CFile *p, string name, CFile **ans){
    
        if(p->name == name){
            *ans = p;
            SHOW(p);
        }
        if(name.find('?') >= 0 && name.find('?') < name.length()){
            if(name.length() != p->name.length()) goto loop;
            int flag = 0;
            for(int i = 0; name[i]; i ++){
                if(name[i] == '?') continue;
                if(name[i] != p->name[i]){
                    flag = 1;
                    break;
                }
            }
            if(flag == 0){
                *ans = p;
                SHOW(p);
            }
        }
    loop:
        if(name.find('*') >= 0 && name.find('*') < name.length()){
            int pos = name.find('*');
            const char *s1 = name.c_str();
            const char *s2 = p->name.c_str();
            if(strncmp(s1, s2, pos) == 0){
                *ans = p;
                SHOW(p);
            }
        }    
        if(p->next.size() == 0) return;
        for(int i = 0; i < (int)p->next.size(); i++){
            DFS(p->next[i], name, ans);
        }
    }
    
    void CRun::FIND(){
        string name;
        cin>>name;
        CFile *ans =new CFile;
        DFS(root, name, &ans);
        if(ans->pre == NULL && ans != root )
        {WRONG}
    }
    void CRun::TOUCH(){
        string name;
        cin>>name;
        if(now->next.size() != 0){
            for(int i = 0; i < (int)now->next.size(); i++){
                if(now->next[i]->type == false && name == now->next[i]->name){
                    WRONG
                        return;
                }
            }
        }
        CFile *file = new CFile;
        file->name = name;
        file->type = false;
        file->permissions = "rwx";
        file->hide = false;
        file->size = 0;
        file->pre = now;
        now->next.push_back(file);
        if(now == root)
            return;
        CFile *tmp = now;
        while(tmp->pre->pre != NULL){
            tmp->pre->num += tmp->num;
            tmp = tmp->pre;
        }
    }
    void CRun::MKDIR(){
        string name;
        cin>>name;
        if(now->next.size() != 0){
            for(int i = 0; i < (int)now->next.size(); i++){
                if(now->next[i]->type == true && name == now->next[i]->name){
                    WRONG
                        return;
                }
            }
        }
        CFile *file = new CFile;
        file->name = name;
        file->type = true;
        file->permissions = "rwx";
        file->hide = false;
        file->size = 0;
        file->pre = now;
        now->next.push_back(file);
        now->num ++;
        if(now == root)
            return;
        CFile *tmp = now;
        while(tmp->pre->pre != NULL){
            tmp->pre->num += tmp->num;
            tmp = tmp->pre;
        }
    }
    CFile::CFile(){
        time_t t = time(0);
        char tmp[64];
        strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A ±¾ÄêµÚ%jÌì ",localtime(&t) );
        make_time = tmp;
        num = 0;
        pre = NULL;
    }
    CFile::~CFile(){
        ;
    }

    3.校园平面导航,最扯淡的一个题目了,其实就是最短路

    View Code
    main.cpp
    
    #include "louzhang.h"
    void Remove(int id);
    void change(int id1, int id2, int w);
    void change2(int id1, int id2, int w);
    int main(){
        for(int i = 0; i < 16; i ++){
            cin>>s[i].name>>s[i].id>>s[i].infomation;
        }
        for(int i = 0; i <= 30; i ++){
            cin>>ed[i].u>>ed[i].v>>ed[i].w;
        }
        memset(list, NULL, sizeof(list));
        for(int i = 1; i <= 30; i ++){
            add_edge(ed[i].u, ed[i].v, ed[i].w);
            add_edge(ed[i].v, ed[i].u, ed[i].w);
        }
        while(true){
            int select;
            puts("1. 查看");
            puts("2. 查看一个景点信息");
            puts("3. 查找两景点最短路 ");
            puts("4. 增加一个景点");
            puts("5. 删除一个景点");
            puts("6. 修路改路");    
            scanf("%d", &select);
            int flag1 = 0;
            int flag2 = 0;
            switch(select){
            case 2:{
                string name;
                cin>>name;
                flag1 = 0;
                for(int i = 0; i < num_view; i ++){
                    if(name == s[i].name){
                        cout<<s[i].infomation<<endl;
                        flag1 = 1;
                        break;
                    }
                }
                if(flag1 == 0)puts("wrong");
                break;
                   }
    
            case 3:{
                string name1, name2;
                cin>>name1>>name2;
                int id1, id2;
                flag1 = flag2 = 0;
                for(int i = 0; i < num_view; i ++){
                    if(name1 == s[i].name){
                        id1 = s[i].id;
                        flag1 = 1;
                    }
                    if(name2 == s[i].name){
                        id2 = s[i].id;
                        flag2 = 1;
                    }
                }
                if(!(flag1 && flag2) ){puts("wrong");break;}
                dijk(id1);
                if(dist[id2] == inf){
                    puts("wrong");
                    break;
                }
                dfs(id2);
                cout<< s[id2 - 1].name<<endl;
                printf("距离:  %d\n",dist[id2]);
                break;
                   }
            case 4:{
                puts("输入景点名称和信息");
                cin>>s[num_view].name;
                cin>>s[num_view].infomation ;            
                num_view ++;
                s[num_view - 1].id = num_view ;
                int num_edge;
                //cin>>num_edge;
                num_edge = 1;
                while(num_edge --){
                    string name;
                    int id1, id2;
                    puts("和哪个景点相连?");
                    cin>>name;
                    for(int i = 0; i < num_view; i ++){
                        if(name == s[i].name){
                            id1 = s[i].id;
                        }                    
                    }
                    puts("距离多少");
                    int w;
                    cin>>w;
                    add_edge(num_view, id1, w);
                    add_edge(id1, num_view, w);
                }
                break;
                   }
            case 5:{
                string name;
                cin>>name;
                int id;
                flag1 = 0;
                for(int i = 0; i < num_view; i ++){
                    if(name == s[i].name){
                        flag1 = 1;
                        s[i].name = "";
                        id = i;
                        for(int j = i; j < num_view; j++){
                            s[j] = s[j + 1];
                        }
                        break;
                    }                    
                }
                if(flag1 == 0){puts("wrong");break;}
                Remove(id + 1);
                num_view --;
                break;
                   }
            case 6:{
                string name1, name2;
                cin>>name1>>name2;
                int id1, id2;
                flag1 = flag2 = 0;
                for(int i = 0; i < num_view; i ++){
                    if(name1 == s[i].name){
                        id1 = s[i].id;
                        flag1 = 1;
                    }
                    if(name2 == s[i].name){
                        id2 = s[i].id;
                        flag2 = 1;
                    }
                }
                if(!(flag1 && flag2) ){puts("wrong");break;}
                int tmp;
                puts("1 加路");
                puts("2 修改");
                puts("3 删除路");
                cin>>tmp;
                int w;
                switch(tmp){
                case 1:
                    cin>>w;
                    add_edge(id1, id2, w);
                    add_edge(id2, id1, w);
                    break;
                case 2:
                    cin>>w;
                    change(id1, id2, w);
                    break;
                case 3:
                    change2(id1, id2, inf);
                }
                break;
                   }
            case 1:
                for(int i = 0 ; i < num_view; i ++){
                    cout<<s[i].name<<"   "<<s[i].infomation<<endl;
                }
            }
        }
        return 0;
    }
    void Remove (int id){
        for(int i = 1; i <= num_view; i ++){
            if(list[i] == NULL)continue;
            if(i == id){
                delete list[i];
                continue;
            }
            edge *tmp = list[i];
            if(tmp->to == id){
                tmp->next = tmp->next->next;
            }
        }    
    }
    void change(int id1, int id2, int w){
        for(int i = 1; i <= num_view; i++){
            if(list[i] == NULL ) continue;
            if ( i == id1){
                edge *tmp = list[i];
                while(tmp != NULL){
                    if(tmp->to == id2)
                        if(tmp->w > w)
                            tmp->w = w;
                    tmp = tmp->next;
                }
                continue;
            }
            if(i == id2){
                edge *tmp = list[i];
                while(tmp !=NULL){
                    if(tmp->to == id1)
                        if(tmp->w > w)
                            tmp->w = w;
                    tmp = tmp->next;
                }
            }
        }
    }
    void change2(int id1, int id2, int w){
        for(int i = 1; i <= num_view; i++){
            if(list[i] == NULL ) continue;
            if ( i == id1){
                edge *tmp = list[i];
                while(tmp != NULL){
                    if(tmp->to == id2)
                            tmp->w = w;
                    tmp = tmp->next;
                }
                continue;
            }
            if(i == id2){
                edge *tmp = list[i];
                while(tmp !=NULL){
                    if(tmp->to == id1)
                            tmp->w = w;
                    tmp = tmp->next;
                }
            }
        }
    }
    
    louzhang.h
    
    
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<iostream>
    #include<cstdlib>
    using namespace std;
    class CViewpoint{
    public:
        
        string name;
        int id;
        string infomation;
    }s[1000];
    int num_view = 16;
    struct Edge{
        int u, v, w;
    }ed[1000];
    const int maxn=1000;
    //定义最大值即0x7fffffff
    const int inf=~0U>>1;
    int path[maxn];//保存路径
    int visit[maxn];//标记是否访问
    int dist[maxn];//保存距离,即结果
    int shortest[maxn];//保存倒找的结点
    //边的结构体
    struct edge{
        int to,w;
        edge*next;
    }*list[maxn];
    int n,m;
    //按最短路长短排序
    struct sort__
    {
        int len;
        int num;
        //重载运算符
        friend bool operator <(const sort__&a,const sort__&b)
        {
            if(a.len!=b.len)return a.len<b.len;else
            a.num<b.num;
        }
    }ans[maxn];
    //加边
    void add_edge(int u,int v,int w){
        edge *tmp=new edge;
        tmp->to=v;
        tmp->w=w;
        tmp->next=list[u];
        list[u]=tmp;
    }
    //dijkstra算法实现
    void dijk(int u){
        edge *tmp=list[u];
        for(int i=1;i<=num_view;i++)dist[i]=inf;
        memset(visit,0,sizeof(visit));
        memset(path,-1,sizeof(path));
        while(tmp!=NULL){
            int v=tmp->to;
            if(dist[v] > tmp->w){
            dist[v]=tmp->w;
            path[v]=u;}
            tmp=tmp->next;
        }
        visit[u]=1;
        dist[u]=0;
        for(int i=1;i<num_view;i++){
            int min=inf,uu=u;
            for(int j=1;j<=num_view;j++){
                if(!visit[j] && dist[j]<min){
                    uu=j;
                    min=dist[j];
                }
            }
            visit[uu]=1;
            tmp=list[uu];
            while(tmp!=NULL){
                int v=tmp->to;
                if(!visit[v] && dist[uu]+tmp->w<dist[v]){
                    dist[v]=dist[uu]+tmp->w;
                    path[v]=uu;
                }
                tmp=tmp->next;
            }
        }
    }
    //递归输出
    void dfs(int i){
        //if(i==-1)return;
        if(path[i]==-1)return;
        dfs(path[i]);
        //printf("%d--->",s[path[i] - 1].name);
        cout<<s[path[i] - 1].name<<"--->";
    }

    就记这么多了= =、多的也不愿意写了,烦躁

  • 相关阅读:
    异常:调用链顺序
    日志分割建议
    java异常处理规范
    忽略字母大小写情况下统计字符出现的次数
    十六进制转化为十进制
    搜索(剪枝优化):HDU 5113 Black And White
    水题:HDU 5112 A Curious Matt
    综合(奇技淫巧):HDU 5118 GRE Words Once More!
    网络流(费用流)CodeForces 321B:Ciel and Duel
    数学(概率)CodeForces 626D:Jerry's Protest
  • 原文地址:https://www.cnblogs.com/louzhang/p/2595501.html
Copyright © 2011-2022 走看看