日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

技术学习博9

發布時間:2023/12/19 综合教程 40 生活家
生活随笔 收集整理的這篇文章主要介紹了 技术学习博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     //建圖,然后初始化錄入信息,后面調用功能記得傳圖地址就行

刪除和查詢最短距離見第十篇

總結

以上是生活随笔為你收集整理的技术学习博9的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。