1. 程式人生 > >資料結構--一筆畫問題

資料結構--一筆畫問題

描述

    zyc從小就比較喜歡玩一些小遊戲,其中就包括畫一筆畫,他想請你幫他寫一個程式,判斷一個圖是否能夠用一筆畫下來。

     規定,所有的邊都只能畫一次,不能重複畫。

輸入

     第一行只有一個正整數N(N<=10)表示測試資料的組數。
     每組測試資料的第一行有兩個正整數P,Q(P<=1000,Q<=2000),分別表示這個畫中有多少個頂點和多少條連線。(點的編號從1到P)
    隨後的Q行,每行有兩個正整數A,B(0<A,B<P),表示編號為A和B的兩點之間有連線。

輸出

    如果存在符合條件的連線,則輸出"Yes",
    如果不存在符合條件的連線,輸出"No"。

樣例輸入

2
4 3
1 2
1 3
1 4
4 5
1 2
2 3
1 3
1 4
3 4

樣例輸出

No
Yes

分析:

對於一個圖能否一筆就能畫完,其實就是判斷是否為尤拉圖。

數學家尤拉找到一筆畫的規律是:

⒈凡是由偶點組成的連通圖,一定可以一筆畫成。畫時可以把任一偶點為起點,最後一定能以這個點為終點畫完。

⒉凡是隻有兩個奇點的連通圖(其餘都為偶點),一定可以一筆畫成。畫時必須把一個奇點為起點,另一個奇點終點。

⒊其他情況的圖都不能一筆畫出。(有偶數個奇點除以二便可算出此圖需幾筆畫成。)

則只需要判斷是否滿足前面兩點其中一個就行。

程式碼:

#include<iostream>
using namespace std;
int e[25][25];
int main()
{
	int N, P, Q, x, y;
	int sum, num;
	cin >> N;
	while (N--)
	{
		cin >> P >> Q;

		memset(e, 0, sizeof(e));
		//初始化圖
		for (int i = 1; i <= Q; i++)
		{
			cin >> x >> y;
			e[x][y] = 1;
			e[y][x] = 1;
		}
		num = 0;
		for (int i = 1; i <= P; i++)
		{
			sum = 0;
			for (int j = 1; j <= P; j++)
			{
				sum += e[i][j];//計算每一個頂點的指數是奇點還是偶點
			}
			if (sum % 2 == 1)
				num++;
		}
		if (num == 0 || num == 2)//如果全是偶點,還是隻有兩個奇點
			cout << "Yes" << endl;
		else
			cout << "No" << endl;
	}
	return 0;
}

相關推薦

資料結構--筆畫問題

描述     zyc從小就比較喜歡玩一些小遊戲,其中就包括畫一筆畫,他想請你幫他寫一個程式,判斷一個圖是否能夠用一筆畫下來。      規定,所有的邊都只能畫一次,不能重複畫。 輸入      第一行只有一個正整數N(N<=10)表示測試資料的組數。  

演算法與資料結構+點點ACM從入門到進階吐血整理推薦書單(珍藏版)

轉載自某大佬部落格 https://pymlovelyq.github.io/2018/10/06/Algorithm/ 前言:技術書閱讀方法論 一.速讀一遍(最好在1~2天內完成) 人的大腦記憶力有限,在一天內快速看完一本書會在大腦裡留下深刻印象,對於之後複習以及總

重學資料結構()單鏈表

最近在重新學習資料結構,特此記錄學習過程,碼農再次上線 關於單鏈表的一些基本操作,以下為基本思路程式碼 首先看一張直觀圖 連結串列的結構體定義如下(為簡便,這裡的ElemType採用int): //單鏈表 typedef struct LNode {

資料結構——順序表

順序表基本運算的實現 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<algorithm> 4 #define MaxSize 50 5 using namespace std; 6

Java實現簡單的資料結構()

利用Java語言實現簡單的資料結構,Java中動態擴容的ArrayList,LinkedList,Stack,Queue以及二叉樹 1.ArrayList import java.util.Arrays; import org.junit.Test; public class A

常見資料結構()-棧,佇列,堆,雜湊表

轉載:https://blog.csdn.net/u013063153/article/details/54667361?locationNum=8&fps=1 寫在前面 本文所有圖片均截圖自coursera上普林斯頓的課程《A

資料結構資料結構與演算法基本含義)

1.1 基礎概念 ● 資料元素       ● 是組成資料的,有一定意義的單位       ● 在計算機中通常作為整體處理       ● 也叫做結點或記

C語言資料結構——步步教會你尾插法和頭插法

連結串列也是線性表的一種,與順序表不同的是,它在記憶體中不是連續存放的。在C語言中,連結串列是通過指標相關實現的。而單鏈表是連結串列的其中一種,關於單鏈表就是其節點中有資料域和只有一個指向下個節點的指標域。  建立單鏈表的方法有兩種,分別是頭插法和尾插法。 所謂頭插法,就是按節點的

資料結構

連結串列的基本功能 List.h程式 #ifndef _LIST_H_ #define _LIST_H_ typedef enum{TRUE,FLAST,ERROR}BOOL; typedef int Data; typedef struct _node { Data data

資料結構() 線性表

(一)線性表的定義 線性結構的特點是:在資料元素的非空有限集中,(1) 存在唯一的一個被成為”第一個”的資料元素;(2)存在唯一的一個被成為”最後一個”的資料元素;(3)除了第一個之外,其他的元素均只有一個前驅,除了最後一個以外,其他的元素均只有一個後繼 線

信管117135張志海資料結構

標頭檔案如下 #ifndef SeqList_H                   &

演算法與資料結構+點點ACM從入門到進階吐血整理推薦書單pdf附網盤下載連結

前言: 技術書閱讀方法論 一.速讀一遍(最好在1~2天內完成) 人的大腦記憶力有限,在一天內快速看完一本書會在大腦裡留下深刻印象,對於之後複習以及總結都會有特別好的作用。對於每一章的知識,先閱讀標題,弄懂大概講的是什麼主題,再去快速看一遍,不懂也沒有關係,但是一定要在不懂的

資料結構()

1.資料結構---資料在計算機中的儲存和組織。 物理結構:線性儲存和鏈式儲存。 邏輯結構:資料的關係和聯絡,線性結構和非線性結構(樹一對多,前繼,後驅)。 資料結構和演算法是伴生的,演算法定義了資料的操作,操作資料。 沒有最好,只有最合適---真相不只有一個。 2.時間複雜度:核心演算法程式碼的執行

資料結構():幾種常見排序演算法比較

排序 0. 常見排序演算法效率比較 時間複雜度及穩定性比較 排序方法 平均方法 最優複雜度 最壞複雜度 輔助空間 穩定性 氣泡排序 O(

圖解Java常用資料結構()\JDK原始碼分析(二)——LinkedList

最近在整理資料結構方面的知識, 系統化看了下Java中常用資料結構, 突發奇想用動畫來繪製資料流轉過程. 主要基於jdk8, 可能會有些特性與jdk7之前不相同, 例如LinkedList LinkedHashMap中的雙向列表不再是迴環的. HashMap中的單鏈表

資料結構: 資料結構概述

    (3)、索引儲存:除了建立儲存結點資訊外,還建立附加的索引表來標識結點的地址。索引表由若干個索引項組成    (4)、雜湊儲存:雜湊儲存,又稱hash儲存,是一種力圖將資料元素的儲存位置與關鍵碼之間建立確定對應關係的查詢技術。雜湊法儲存的基本思想是:由結點的關鍵碼值決定結點的儲存地址。雜湊技術除了可以

資料結構(線性表)

緒論中我們大體介紹了資料結構的概念,接下來我們就從邏輯結構具體介紹幾種結構。 我們知道資料結構分為邏輯結構、儲存結構、資料的運算。既然我們從邏輯結構方面具體介紹各個資料結構,那麼接下來,我們只用掌握它的儲存結構和基本操作運算就好啦。 首先介紹的是線性結構中的線性表。 一、儲存結構

演算法與資料結構():時間複雜度與空間複雜度

最近突然萌生了一個想法,好好系統的學習一下演算法與資料結構然後產生一系列的文章來回顧與總結學到的東西,這部分我想從最簡單的部分一一介紹總結,包括一些很基礎的內容 為什麼要學習資料結構與演算法 以前在學校的時候就知道 程式 = 演算法 + 資料結構,程式的作用是用來處理與解決現實問題,而在描述與解決現實問

淺談演算法和資料結構: 棧和佇列

最近晚上在家裡看Algorithems,4th Edition,我買的英文版,覺得這本書寫的比較淺顯易懂,而且“圖碼並茂”,趁著這次機會打算好好學習做做筆記,這樣也會印象深刻,這也是寫這一系列文章的原因。另外普林斯頓大學在Coursera 上也有這本書同步的公開課,還有另外一門演算法分析課,這門課程的作者也是

深入淺出spi驅動之資料結構()

Allein.Cao原創作品,轉載請註明出處: 核心版本:2.6.32.2 硬體:S3C2440  SPI匯流排是一種比較通用的資料傳輸匯流排,遵從主從模式,由主裝置發起通訊請求,通常工作於全雙工模式,由4條資料時鐘線組成,下面這段話摘自s3c2440資料手冊: There are 4