zoukankan      html  css  js  c++  java
  • 技术学习博9

    第十六周结课了,所以都在复习

    第十七周做实践作业,用赋权无向图做个校园导游程序

    这里放一下图的定义、初始化、显示矩阵、查询、修改(更新)和添加函数

    结构体定义

     1 /*路径的定义*/
     2 typedef struct{
     3     int metre;                /*距离,单位米*/
     4     char LJinfo[MAX];        /*路线信息或吐槽,MAX请自行定义值*/
     5 }LuJing;
     6 
     7 /*景点信息的定义*/
     8 typedef struct{
     9     int Num;                /*景点编号*/
    10     char MingCheng[MAX];    /*景点名称*/
    11     char JDinfo[MAX];        /*景点信息,简介或吐槽*/
    12 }JingDian;
    13 
    14 /*校园图(邻接矩阵)的定义)*/
    15 typedef struct{
    16     int Vexnum,Arcnum;        /*图的景点数量和路线数量*/
    17     JingDian vex[MAX];        /*景点*/
    18     LuJing Arcs[MAX][MAX];    /*邻接矩阵*/
    19 }SchoolMap;

    初始化图的内容

     1 /*初始化校园导游图的内容*/
     2 void jiantu(SchoolMap *G){
     3     int i,j;
     4     G->Vexnum=8;                    //8个景点
     5     G->Arcnum=12;                //12条路线
     6 
     7     for(i=1;i<=G->Vexnum;i++)        //初始化景点间的距离
     8         for(j=1;j<=G->Vexnum;j++)
     9             G->Arcs[i][j].metre=INF;    //INF无穷表示各景点间没有连接,INF请自行定义值
    10 
    11     for(i=1;i<=G->Vexnum;i++)//我这边下标是从1开始的        
    12         for(j=1;j<=G->Vexnum;j++)
    13             if(i==j) G->Arcs[i][j].metre=0; //将景点自身距离重置为0
    14 
    15     /*1景点,2景点,3景点……8景点*/
    16     for(i=1;i<=G->Vexnum;i++)
    17         G->vex[i].Num=i;            //初始化景点编号(因为就按顺序来的,所以后面调用可能会直接用i哈哈
    18 
    19     strcpy(G->vex[1].MingCheng,"名称");
    20     strcpy(G->vex[1].JDinfo,"景点的简介 ");
    21     G->Arcs[1][2].metre=200;        /*无向图要注意来回都要写*/
    22     G->Arcs[2][1].metre=200;
    23     strcpy(G->Arcs[1][2].LJinfo,"1景点去2景点的道路信息");
    24     strcpy(G->Arcs[2][1].LJinfo,"来回路可以写一样,看你的需求");
    25     G->Arcs[1][3].metre=350;        /*1景点到3景点*/
    26     G->Arcs[3][1].metre=350;
    27     strcpy(G->Arcs[1][3].LJinfo,"同上");
    28     strcpy(G->Arcs[3][1].LJinfo,"同上");
    29     //后面景点的初始化类似就不展开了,景点越多写的越多
    30 }

    显示

     1 /*1显示校园地图*/
     2 void Show(SchoolMap *G){
     3     int i,j;
     4     printf("
    	    ");
     5     for(i=1;i<=G->Vexnum;i++)
     6         printf("%-10s",G->vex[i].MingCheng);            /*第一行名称,%-10s为了排版好看,下同*/
     7     
     8     printf("
    ");
     9     for(i=1;i<=G->Vexnum;i++)
    10     {    
    11         printf("%11s ",G->vex[i].MingCheng);            /*左边名称纵列*/
    12             for(j=1;j<=G->Vexnum;j++)
    13             {
    14                 if(G->Arcs[i][j].metre!=INF)
    15                     printf("%-10d",G->Arcs[i][j].metre);    
    16                 else
    17                     printf("%-10s","");    //不想直接打数字,所以用无穷的符合来替换啦
    18             }
    19         printf("
    ");
    20     }
    21 
    22     printf("
    ————————————————————我只是条分割线,别看我(/ω\)——————————————————
    
    ");
    23 }

    查询景点简介

     1 /*2查询景点的简介*/
     2 void ChaXunJDjianjie(SchoolMap *G){
     3     int i,kkr;
     4 
     5     printf("
    		");
     6     for(i=1;i<=G->Vexnum;i++)
     7         printf("%d%s ",i,G->vex[i].MingCheng);
     8     printf("
    			(^_^)/请输入景点编号来查询景点的简介:");
     9     scanf("%d",&kkr);
    10     
    11     if(kkr==G->vex[kkr].Num)
    12     {
    13         printf("
    			%s的简介为:%s",G->vex[kkr].MingCheng,G->vex[kkr].JDinfo);
    14     }
    15     else printf("
    			查询失败(看看是不是输错了)-_-# 
    ");
    16 
    17     printf("
    ————————————————————我只是条分割线,别看我(/ω\)——————————————————
    
    ");
    18 }

    查询景点间的道路

     1 /*3查询景点间的道路*/
     2 void ChaXunJDdaolu(SchoolMap *G){
     3     int i,z=0,x=0;
     4 
     5     printf("
    		");
     6     for(i=1;i<=G->Vexnum;i++)
     7         printf("%d%s ",i,G->vex[i].MingCheng);
     8     printf("
    
    			(^_^)/请输入起止景点编号来查询景点间的道路
    
    			景点1的编号和景点2的编号(空格隔开):");
     9     fflush(stdin);    /*消除前面回车的影响*/
    10     scanf("%d %d",&z,&x);
    11     if(G->Arcs[z][x].metre>0 && G->Arcs[z][x].metre<INF)
    12         printf("
    			%s到%s的道路信息:%s
    ",G->vex[z].MingCheng,G->vex[x].MingCheng,G->Arcs[z][x].LJinfo);
    13     else
    14         printf("
    			查询失败(两个景点间没有直接线路,或者看看是不是输错数字了)-_-# 
    ");
    15 
    16     printf("
    ————————————————————我只是条分割线,别看我(/ω\)——————————————————
    
    ");
    17 }

    更新(修改)景点简介

     1 /*4更新景点简介*/
     2 void UpdateJDinfo(SchoolMap *G){
     3     int i,kkr;
     4     char c1[MAX];
     5     printf("
    		");
     6     for(i=1;i<=G->Vexnum;i++)
     7         printf("%d%s ",i,G->vex[i].MingCheng);
     8     printf("
    			(^_^)/请选择要更新的景点简介(输入数字):");
     9     scanf("%d",&kkr);
    10     
    11     if(kkr==G->vex[kkr].Num)
    12     {
    13         printf("
    			%s的简介为:%s
    
    			(^_^)/请输入新的景点简介:",G->vex[kkr].MingCheng,G->vex[kkr].JDinfo);
    14         fflush(stdin);    /*消除前面回车的影响*/
    15         scanf("%s",c1);
    16         strcpy(G->vex[kkr].JDinfo,c1);
    17         printf("
    			%s的简介已更新为:%s
    ",G->vex[kkr].MingCheng,G->vex[kkr].JDinfo);
    18     }
    19     else printf("
    			咦~!没有找到这个景点呢,看看是不是输错了-_-#
    ");
    20 
    21     printf("
    ————————————————————我只是条分割线,别看我——————————————————
    
    ");
    22 }

    更新(修改)道路信息

     1 /*5更新道路信息*/
     2 void UpdateLJinfo(SchoolMap *G){
     3     int i,z=0,x=0,pd=0;
     4     char c1[MAX];
     5     printf("
    		");
     6     for(i=1;i<=G->Vexnum;i++)
     7         printf("%d%s ",i,G->vex[i].MingCheng);
     8     printf("
    
    			(^_^)/请输入起止景点编号来看看景点间有没道路
    
    			景点1的编号和景点2的编号(空格隔开):");
     9     fflush(stdin);    /*消除前面回车的影响*/
    10     scanf("%d %d",&z,&x);
    11     if(G->Arcs[z][x].metre>0 && G->Arcs[z][x].metre<INF)
    12     {
    13         printf("
    			%s到%s的道路信息:%s
    ",G->vex[z].MingCheng,G->vex[x].MingCheng,G->Arcs[z][x].LJinfo);
    14         printf("
    			(^_^)/请输入新的道路信息:");
    15         fflush(stdin);    /*消除前面回车的影响*/
    16         scanf("%s",c1);
    17         strcpy(G->Arcs[z][x].LJinfo,c1);
    18         printf("
    			%s到%s的道路信息已更新为:%s
    ",G->vex[z].MingCheng,G->vex[x].MingCheng,G->Arcs[z][x].LJinfo);
    19     }
    20     else
    21         printf("
    			查询失败(两个景点间没有直接线路,或者看看是不是输错数字了)-_-# 
    ");
    22 
    23     printf("
    ————————————————————我只是条分割线,别看我(/ω\)——————————————————
    
    ");
    24 }

    添加新景点

     1 /*6增加新的景点*/
     2 void AddNewJD(SchoolMap *G){
     3     int i;
     4     char c1[MAX];
     5 
     6     printf("
    		目前已有的景点:");
     7     for(i=1;i<=G->Vexnum;i++)
     8         printf("%s ",G->vex[i].MingCheng);
     9     
    10     printf("
    			(^_^)/请输入新的景点名称:");
    11     fflush(stdin);    /*消除前面回车的影响*/
    12     scanf("%s",c1);
    13 
    14     for(i=1;i<=G->Vexnum;i++)
    15     {
    16         if(strcmp(G->vex[i].MingCheng,c1)==0)
    17         {
    18             printf("
    			哎呀~已经有了这个景点了
    ");break;
    19         }
    20         else
    21         {
    22             G->Vexnum++;                            /*景点数量加1*/
    23             G->vex[G->Vexnum].Num=G->Vexnum;        /*新景点获得编号*/
    24             strcpy(G->vex[G->Vexnum].MingCheng,c1);    /*新景点获得名字*/
    25             
    26             for(i=1;i<=G->Vexnum;i++)
    27             {
    28                 G->Arcs[i][G->Vexnum].metre=INF;    //新景点到其他景点的距离初始为无连接
    29                 G->Arcs[G->Vexnum][i].metre=INF;    //其他景点到新景点的距离初始为无连接
    30             }
    31             G->Arcs[G->Vexnum][G->Vexnum].metre=0;    //新景点自身距离为0
    32             strcpy(G->vex[G->Vexnum].JDinfo,"这个人很帅,什么都没有写←_←");        /*添加默认简介*/
    33 
    34             printf("
    			添加成功(^_^)/
    
    			新的景点名称:%s",G->vex[G->Vexnum].MingCheng);
    35             printf("
    
    		目前已有的景点:");
    36             for(i=1;i<=G->Vexnum;i++)
    37                 printf("%s ",G->vex[i].MingCheng);
    38             printf("
    ");
    39             break;
    40         }
    41     }
    42     printf("
    ————————————————————我只是条分割线,别看我(/ω\)——————————————————
    
    ");
    43 }

    添加新道路

     1 /*7增加新的道路*/
     2 void AddNewLJ(SchoolMap *G){
     3     int i,jl,z,x;
     4 
     5     printf("
    		目前已有的景点:");
     6     for(i=1;i<=G->Vexnum;i++)
     7         printf("%d%s ",G->vex[i].Num,G->vex[i].MingCheng);        /*虽然G->vex[i].Num和i一样没差啦,不过还是要看你的编号怎么排的*/
     8 
     9     printf("
    			(^_^)/请输入新道路的起止点(输入数字,空格隔开):");
    10     fflush(stdin);    /*消除前面回车的影响*/
    11     scanf("%d %d",&z,&x);
    12     
    13     if(G->Arcs[z][x].metre>0 && G->Arcs[z][x].metre<INF)
    14     {
    15         printf("
    			哎呀~这两个景点间已经有一条路了,不用再修了(^○^)
    ");
    16     }
    17     else
    18     {
    19         if(z>G->Vexnum||x>G->Vexnum||z<1||x<1)
    20             printf("
    			哎呀~没有输入正确的景点编号呢,不能修路了啊T_T
    ");
    21         else
    22         {
    23             printf("
    			好,是新修的路呢
    			请输入这条路的长度(单位米):");
    24             fflush(stdin);        /*消除前面回车的影响*/
    25             scanf("%d",&jl);    /*获取距离*/
    26             if(jl<=0)
    27                 printf("
    			输入有误哦,请检查一下吧");
    28             else
    29             {
    30                 G->Arcs[z][x].metre=jl;        /*更新距离*/
    31                 G->Arcs[x][z].metre=jl;
    32                 strcpy(G->Arcs[z][x].LJinfo,"这个人很帅,什么都没有写←_←"); //初始化新加的道路的信息
    33                 strcpy(G->Arcs[x][z].LJinfo,"这个人很帅,什么都没有写←_←");
    34                 G->Arcnum++;                /*路线数量加1*/
    35                 printf("
    			操作成功!
    			%s到%s间有一条新路了,距离%d米
    ",G->vex[z].MingCheng,G->vex[x].MingCheng,G->Arcs[z][x].metre);
    36             }
    37         }
    38     }
    39 
    40     printf("
    ————————————————————我只是条分割线,别看我(/ω\)——————————————————
    
    ");
    41 }

    主函数

    1     SchoolMap G;        
    2     jiantu(&G);
    3     //建图,然后初始化录入信息,后面调用功能记得传图地址就行

    删除和查询最短距离见第十篇

  • 相关阅读:
    Spring MVC 核心组件详解
    Spring MVC 入门就这一篇
    Spring 事务解决方案
    【UGUI源码分析】Unity遮罩之Mask详细解读
    游戏开发中不同时区下的时间问题
    ARTS第十三周(阅读Tomcat源码)
    Win10 电脑安装.NET低版本提示“这台计算机中已经安装了 .NET Framwork 4.6.2或版本更高的更新”问题
    Dynamics 365 Setup 提示SqlServer 存在
    Dynamics CRM "Verification of prerequisites for Domain Controller promotion failed. Certificate Server is installed."
    Dynamics CRM
  • 原文地址:https://www.cnblogs.com/hhw-/p/13201058.html
Copyright © 2011-2022 走看看