国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - 數據結構課程設計- 解析最少換車次數的問題詳解

數據結構課程設計- 解析最少換車次數的問題詳解

2020-12-04 10:27C++教程網 C/C++

數據結構課程設計-解析最少換車次數的問題詳解,求得從站0出發乘公交車至站n一1的最少換車次數。

問題描述: 設某城市有n個車站,并有m條公交線路連接這些車站。設這些公交車都是單向的,這n個車站被順序編號為0~n-1。編號程序,輸入該城市的公交線路數,車站個數,以及各公交線路上的各站編號。
實現要求:求得從站0出發乘公交車至站n一1的最少換車次數。
程序設計思路:利用輸入信息構建一張有向圖G(用鄰接短陣g表示),有向圖的頂點是車站,若有某條公交線路經i站能到達j站,就在頂點i到頂點j之間設置一條權為1的有向邊<i,j)。這樣,從站x至站y的最少上車次數便對應于圖G中從點x至點y的最短路徑長度。而程序要求的換車次數就是上車次數減1。
代碼如下:

復制代碼 代碼如下:


#include <stdio.h>
#include <stdlib.h>
#define INFINITY 9999
#define MAXVNUM 30
char ans;
typedef struct
{
 int Vnum;
 int arcs[MAXVNUM][MAXVNUM];            //圖的存儲結構為鄰接矩陣
}Graph;
int createGraph(Graph *g,int *start,int *end)
{
 int n,m,i,j,k,s,count;
 int t[MAXVNUM];
 printf("\n★ 請輸入公交車站數和公交車數:\n");
 scanf("%d %d",&n,&m);
 if(n<=1 || m<1)
  return -1;
 g->Vnum = n;
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
   g->arcs[i][j] = INFINITY;    //鄰接矩陣初始化
 for(s=0;s<m;s++)
 {
  printf("\n▲請輸入第%d輛公交車所途經各站的編號【0<=編號<=%d,-1結束】:\n",s+1,n-1);
  scanf("%d",&k);
  count = 0;
  while(k!=-1)
  {
   t[count++]=k;
   scanf("%d",&k);
  }
  for(i=0;i<count-1;i++)
  {
   for(j=i+1;j<count;j++)        //當前線路中,從t[i]到t[j]有直達公交車
    g->arcs[t[i]][t[j]]=1;
  }
 }
 printf("\n★ 請輸入上車站編號和下車站編號【0<=編號<=%d】:\n",n-1);
 scanf("%d%d",start,end);
 if( *start<0 || *start>n-1 || *end<0 || *end>n-1)
  return -1;
 return 0;
}
int findMinmum(Graph g,int start,int end)   //迪杰斯特拉算法找最小上車次數
{
 int s[MAXVNUM];
 int i,j,u,*dist,min;
 if(start==end)
  return 0;
 dist=(int *)malloc(sizeof(int));
 if(dist==NULL)
  return -1;
 for(i=0;i<g.Vnum;i++)
 {
  dist[i]=g.arcs[start][i];    //從start可直達的站點上車次數置1
  s[i]=0;       //所有站點的上車次數還未找到
 }
 s[start]=1;   //已經找到站點start的最少上車次數
 dist[start]=0;   //從站點start到start的最少上車次數初始化為0
 for(i=0;i<g.Vnum;++i)
 {
  min=INFINITY;
  u=start;
  for(j=0;j<g.Vnum;++j)  //u是從start出發能夠到達的所有站點中上車次數最少者
  {
   if(s[j]==0 && dist[j]<min)
   {
    min=dist[j];
    u=j;
   }
  }
  s[u]=1;    //已經找到從站點start到u的最少上車次數,將u加入集合s
  for(j=0;j<g.Vnum;++j)   //更新當前情況下其他站點的最少上車次數
  {
   if(s[j]==0 && min+g.arcs[u][j]<dist[j])
    dist[j]=min+g.arcs[u][j];
  }
 }
 return dist[end];
}
int main(void)
{
 int start,end,m;
 printf("\n說明:");
 printf("\n\t您好!歡迎使用該系統!\n");
 printf("\t[一]  本系統是根據有向圖創建的,請先輸入你想乘車地點到目的地共有多少站和該地點的公交車數量。站數相當于有向圖中的頂點數。\n");
 printf("\t[二]  請輸入每條公交車所路徑的站點,相當于有向圖中連接每條邊的頂點。輸入完后按-1進入下一輛公交車的路徑。\n ");
 printf("\t[三]  請輸入上車地點的站編號和下車站的編號,相當于有向圖中任意的兩個頂點。輸入完后系統將會根據所輸入的信息輸出最少換車次數。\n ");
 do
 {
  Graph G;
  if(createGraph(&G,&start,&end)==-1)
  {
   printf("\n     真遺憾!\n    創建有向圖失敗!   \n    請重新輸入數據 !\n");
   return 0;
  }
  m=findMinmum(G,start,end);
  if(m<INFINITY)
   printf(" 恭喜!\n  有車可以到達該目的地\n  從上車站%d到下車站%d的最少換車次數為:  %d\n",start,end,m-1);
  else
   printf("\n對不起!\n沒有相應的公交車可以到達該站點 !\n");
  printf("\n是否繼續呢(y/n)?");
  fflush(stdin);
  ans=getchar();
  system("cls");
 }while(ans=='y' || ans=='Y');
 printf("\n-----------------------謝謝你使用該系統!----------------------------");
 system("pause");
 return 0;
}

延伸 · 閱讀

精彩推薦
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 久久久精| 精品伊人| 新久久久久久 | 日韩午夜av| 欧美wwwsss9999| 久久免费精品视频 | 高清成人| 一区二区三区在线看 | 超碰在线99| 精品玖玖玖 | 一本色道久久综合狠狠躁篇怎么玩 | 亚洲二区在线 | 欧美电影免费网站 | 中文久久 | 欧美视频一区 | 九九热在线播放 | 国产精品毛片在线 | 日韩高清国产一区在线 | 国产精品jizz在线观看麻豆 | 亚洲国产精品福利 | 亚洲免费在线 | 玖玖精品 | 81精品国产乱码久久久久久 | 国产99久久久精品视频 | 香蕉av影院 | 国产精品色哟哟哟 | 欧美大片一区 | 国产精品久久久久久久久免费高清 | 一区二区福利 | 成人免费一区 | 91精品国产综合久久婷婷香蕉 | 日韩欧美在线观看视频 | 精品国产免费看 | 免费性大片 | a在线观看免费视频 | 婷婷国产精品 | 久久麻豆| 日韩毛片免费看 | 国产精品综合久久 | 男女免费观看在线爽爽爽视频 | 日韩电影在线 |