程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 判斷歐拉回路

判斷歐拉回路

編輯:C++入門知識

(1)九度上的練習題 題目描述:     歐拉回路是指不令筆離開紙面,可畫過圖中每條邊僅一次,且可以回到起點的一條回路。現給定一個圖,問是否存在歐拉回路? 輸入:     測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數,分別是節點數N ( 1 < N < 1000 )和邊數M;隨後的M行對應M條邊,每行給出一對正整數,分別是該條邊直接連通的兩個節點的編號(節點從1到N編號)。當N為0時輸入結束。 輸出:     每個測試用例的輸出占一行,若歐拉回路存在則輸出1,否則輸出0。 樣例輸入: 3 3 1 2 1 3 2 3 3 2 1 2 2 3 0 樣例輸出: 1 0 來源: (2)實現源碼 [cpp]   #include <iostream>   #include <string.h>   #include <stdlib.h>       using namespace std;       #define LEN 1001   bool visited[LEN];   bool arc[LEN][LEN];       int degree[LEN];       void DFS(int v, int n)   {       visited[v] = true;       for(int i = 1;i<=n;i++)       {           if(!visited[i]&&arc[v][i])               DFS(i, n);       }   }       bool isConnected(int n)       {       for(int i=1;i<=n;i++)       {           if(!visited[i]){return false;}       }       return true;   }       bool isCircuit(int n)         {       for(int i=1;i<=n;i++)       {           if(degree[i]%2)               return false;       }       return true;   }       int main()   {       int p,q, n,m;       while(cin>>n)       {           if(n == 0)               break;           cin>>m;           memset(visited,0,LEN);           memset(arc,0,sizeof(bool)*LEN*LEN);           memset(degree,0,sizeof(int)*LEN);           for(int i=0;i<m;i++)           {               cin>>p>>q;               degree[p]++;               degree[q]++;               arc[p][q]=arc[q][p]=true;           }           DFS(1,n);           if(!isConnected(n))              cout<<0<<endl;           else           {               if(isCircuit(n))                   cout<<1<<endl;               else                   cout<<0<<endl;           }       }       return 0;   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved