青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

The Fourth Dimension Space

枯葉北風寒,忽然年以殘,念往昔,語默心酸。二十光陰無一物,韶光賤,寐難安; 不畏形影單,道途阻且慢,哪曲折,如渡飛湍。斬浪劈波酬壯志,同把酒,共言歡! -如夢令

#

淺究初等數論之中國剩余定理(Chinese Remainder Theorem)

 推論1:方程ax=b(mod n)對于未知量x有解,當且僅當gcd(a,n) | b。
 推論2:方程ax=b(mod n)或者對模n有d個不同的解,其中d=gcd(a,n),或者無解。
 定理1:設d=gcd(a,n),假定對整數x和y滿足d=ax+by(比如用擴展Euclid算法求出的一組解)。如果d | b,則方程ax=b(mod n)有一個解x0滿足x0=x*(b/d) mod n 。特別的設e=x0+n,方程ax=b(mod n)的最小整數解x1=e mod (n/d),最大整數解x2=x1+(d-1)*(n/d)。
 定理2:假設方程ax=b(mod n)有解,且x0是方程的任意一個解,則該方程對模n恰有d個不同的解(d=gcd(a,n)),分別為:xi=x0+i*(n/d) mod n 。


證明過程請詳見 《算法導論》

    #include<iostream>
#include
<algorithm>
#include
<cmath>
#include
<cstdio>
using namespace std;

int EXTENDED_EUCLID(int a,int b,int &x,int &y)//擴展歐幾里德算法
{
    
if(b==0)
    
{
        x
=1;
        y
=0;
        
return a;
    }

    
int r=EXTENDED_EUCLID(b,a%b,x,y);
    
int temp=x;
    x
=y;
    y
=temp-a/b*y;
    
return r;
}


int  MODULAR_LINEAR(int a,int b,int n)//求解模線性方程
{
    
int d,x,y;
    
int x0;
    d
=EXTENDED_EUCLID(a,n,x,y);
    x0
=(x*(b/d)+n)%n;
    
return x0;
}

//當時魚頭讓我們研究的時候,沒有考慮得太仔細,上面的方程只能求出一個可行解
//而下面的函數能夠求出最小的整數解,甚至在模n內任意的解
long long  MODULAR_LINEAR(long long a,long long b,long long n)//求解模線性方程
{
    
long long d,x,y;
    
long long x0;
    d
=EXTENDED_EUCLID(a,n,x,y);
    
if(b%d)
        
return -1;
    x0
=(x*(b/d))%n+n;//確保是正數
    x0%=(n/d);//x0是第一個大于0的整數解
    return x0;
}


int CHINESE_RESIDUE_THEOREM(int n[],int b[],int k)//求解模線性方程組,所有數據從1號下標開始存儲
{

    
int result=0;
    
int i;
    
int N=1;
    
int *m=new int [k+1];
    
int *reversem=new int [k+1];
    
int sum=0;
    
for(i=1;i<=k;i++)
    
{
        N
*=n[i];
    }

    
for(i=1;i<=k;i++)
    
{

        m[i]
=N/n[i];
        reversem[i]
=MODULAR_LINEAR(m[i],1,n[i]);
        sum
+=m[i]*reversem[i]*b[i];
    }

    result
=sum%N;
    
return result;
}



int main ()
{

    
int num;
    
int i;
    printf(
"參考格式:X mod n[i] = b[i]\n");
    cout
<<"請輸入方程的個數:";
    cin
>>num;
    
int *n=new int [num+1];
    
int *b=new int [num+1];
    
for(i=1;i<=num;i++)
    
{

        cout
<<"請輸入第"<<i<<"個方程的n和b:";
        cin
>>n[i]>>b[i];
    }

    
int result=CHINESE_RESIDUE_THEOREM(n,b,num);
    cout
<<"解為:";
    cout
<<result<<endl;
    cout
<<"謝謝你的使用"<<endl;
    system(
"pause");
    
return 0;
}

posted @ 2009-04-08 01:15 abilitytao 閱讀(1642) | 評論 (0)編輯 收藏

POJ 2996-Help Me with the Game(模擬題)

     摘要: 這道題直接模擬就好了,不過我有一點不明白的是,確定棋子的位置時兩次的搜索順序為什么不同?如果說要考慮玩家的視角的話,為什么輸出的格式還是一樣的呢?呵呵。值得一提的是:為了模擬這道題,我把所有的步驟分布來寫了。1.初步讀入數據,略去棋盤框架(input);2.精確讀入棋盤點每個棋子的信息,過濾(filter);3.搜索(read)4.輸出(print)不過值得注意的是:這樣寫代碼會很長,看來怎么縮短...  閱讀全文

posted @ 2009-04-04 23:27 abilitytao 閱讀(486) | 評論 (0)編輯 收藏

POJ 2643-Election(map容器水之)

這道題的大意是:
有n個黨派,每個黨派有一位主席,現在選舉國家領導人,m個人投票,看看獲勝的是那個黨或者是個人;
PS:題目里沒說清楚,就是每個黨派只有一個候選人,這個要注意下,其它的沒什么好說的了,此題不難。
#include<iostream>
#include
<cmath>
#include
<string>
#include
<algorithm>
#include
<map>
using namespace std;

map
<string,string>mymap_party;
map
<int,string>mymap_name;
map
<string,int>mymap_index;

int votenum[1000000];

int main()
{
    
int i;
    
int n,m;
    memset(votenum,
0,sizeof(votenum));
    scanf(
"%d",&n);
    cin.ignore();
    
for(i=1;i<=n;i++)
    
{
        
string temp1;
        
string temp2;
        getline(cin,temp1);
        getline(cin,temp2);
        mymap_party[temp1]
=temp2;
        mymap_name[i]
=temp1;
        mymap_index[temp1]
=i;
    }

    scanf(
"%d",&m);
    cin.ignore();
    
for(i=1;i<=m;i++)
    
{

        
string temp;
        getline(cin,temp);
        votenum[mymap_index[temp]]
++;
    }

    
int max=0;
    
int maxmark=0;
    
int secmax=0;
    
for(i=1;i<=n;i++)
    
{

        
if(votenum[i]>max)
        
{
            secmax
=max;
            max
=votenum[i];
            maxmark
=i;
        }

        
else if(votenum[i]>secmax)
        
{
            secmax
=votenum[i];
        }

    }

    
string test("independent");
    
if(max==secmax)
        printf(
"tie\n");
    
else if(max!=secmax&&mymap_party[mymap_name[maxmark]]==test)
        cout
<<mymap_name[maxmark]<<endl;
    
else 
        cout
<<mymap_party[mymap_name[maxmark]]<<endl;
    system(
"pause");


    
return 0;

}









posted @ 2009-04-04 17:12 abilitytao 閱讀(404) | 評論 (0)編輯 收藏

POJ 1093-Sorting It All Out(早知道不用拓撲排序了。。。)

     摘要: 剛上完數據結構課,想練習一下鄰接表以及拓撲排序,于是找到了這道題,沒想到這道題遠遠不止拓撲排序這么簡單,汗~PS:這道題用拓撲排序要特別注意,當度為零的點>1時,要判斷圖中是否有環。我就是錯在這里,結果調了一個下午。 #include<iostream>#include<algorithm>#include<cassert>#include<cma...  閱讀全文

posted @ 2009-04-04 01:05 abilitytao 閱讀(602) | 評論 (1)編輯 收藏

ACM模板之—堆棧(模板類)

//BEGIN_TEMPLATE_BY_ABILITYTAO_ACM
#include<iostream>
#include
<algorithm>
#include
<cassert>
using namespace std;

template
<class T>
class Stack
{

private:
    
int top;
    T 
*element;
    
int maxsize;
public:
    Stack(
int n=100000);
    
~Stack(){delete []element;}
    
void push(const T &item);
    T pop();
    T gettop();
    
int size();
    
void clear(){top=-1;}
    
bool isempty()const {return top==-1;}
    
bool isfull()const {return top==maxsize-1;}
}
;

template
<class T>
Stack
<T>::Stack(int n = 100000):top(-1),maxsize(n)
{

    element
=new T[maxsize];
    assert(element
!=0);
}


template
<class T>
void Stack<T>::push(const T &item)
{

    assert(
!isfull());
    element[
++top]=item;
}


template
<class T>
T Stack
<T>::pop()
{

    assert(
!isempty());
    
return element[top--];
}


template
<class T>
T Stack
<T>::gettop()
{

    assert(
!isempty());
    
return element[top];
}

template
<class T>
int Stack<T>::size()
{
    
return top+1;
}

//END_TEMPLATE_BY_ABILITYTAO_ACM


int main ()
{

    Stack
<int>test;
    
bool b;
    
int i;
    
int n;
    
for(i=1;i<=10;i++)
    
{
        b
=test.isfull();
        test.push(i);
    }

    n
=test.size();
    b
=test.isfull();
    
for(i=1;i<=5;i++)
        
int n=test.pop();
    test.clear();
    
for(i=1;i<=10;i++)
        test.push(i);
    
for(i=1;i<=10;i++)
    
{
        b
=test.isempty();
        cout
<<test.pop();
    }

    b
=test.isempty();
    
return 0;
    


}

posted @ 2009-04-03 12:02 abilitytao 閱讀(1765) | 評論 (5)編輯 收藏

C++中模板使用介紹(轉)

1. 模板的概念。

我們已經學過重載(Overloading),對重載函數而言,C++的檢查機制能通過函數參數的不同及所屬類的不同。正確的調用重載函數。例如,為求兩個數的最大值,我們定義MAX()函數需要對不同的數據類型分別定義不同重載(Overload)版本。

//函數1.

int max(int x,int y);
{return(x>y)?x:y ;}

//函數2.
float max( float x,float y){
return (x>y)? x:y ;}

//函數3.
double max(double x,double y)
{return (c>y)? x:y ;}

但如果在主函數中,我們分別定義了 char a,b; 那么在執行max(a,b);時 程序就會出錯,因為我們沒有定義char類型的重載版本。

現在,我們再重新審視上述的max()函數,它們都具有同樣的功能,即求兩個數的最大值,能否只寫一套代碼解決這個問題呢?這樣就會避免因重載函數定義不 全面而帶來的調用錯誤。為解決上述問題C++引入模板機制,模板定義:模板就是實現代碼重用機制的一種工具,它可以實現類型參數化,即把類型定義為參數, 從而實現了真正的代碼可重用性。模版可以分為兩類,一個是函數模版,另外一個是類模版。

2.   函數模板的寫法

函數模板的一般形式如下:

Template <class或者也可以用typename T>

返回類型 函數名(形參表)
{//
函數定義體 }

說明: template是一個聲明模板的關鍵字,表示聲明一個模板關鍵字class不能省略,如果類型形參多余一個 ,每個形參前都要加class <類型 形參表>可以包含基本數據類型可以包含類類型.

請看以下程序:

//Test.cpp

#include <iostream>

using std::cout;

using std::endl;

//聲明一個函數模版,用來比較輸入的兩個相同數據類型的參數的大小,class也可以被typename代替,

//T可以被任何字母或者數字代替。

template <class T>

T min(T x,T y)

{ return(x<y)?x:y;}

void main( )

{

     int n1=2,n2=10;

     double d1=1.5,d2=5.6;

     cout<< "較小整數:"<<min(n1,n2)<<endl;

     cout<< "較小實數:"<<min(d1,d2)<<endl;

     system("PAUSE");

}

程序運行結果: 

 

程序分析:main()函數中定義了兩個整型變量n1 , n2 兩個雙精度類型變量d1 , d2然后調用min( n1, n2); 即實例化函數模板T min(T x, T y)其中T為int型,求出n1,n2中的最小值.同理調用min(d1,d2)時,求出d1,d2中的最小值.

3. 類模板的寫法

定義一個類模板:

Template < class或者也可以用typename T >
class
類名{
//類定義......
};

說明:其中,template是聲明各模板的關鍵字,表示聲明一個模板,模板參數可以是一個,也可以是多個。

例如:定義一個類模板:

// ClassTemplate.h
#ifndef ClassTemplate_HH

#define ClassTemplate_HH

template<typename T1,typename T2>

class myClass{

private:

     T1 I;

     T2 J;

public:

     myClass(T1 a, T2 b);//Constructor

     void show();

};

//這是構造函數

//注意這些格式

template <typename T1,typename T2>

myClass<T1,T2>::myClass(T1 a,T2 b):I(a),J(b){}

//這是void show();

template <typename T1,typename T2>

void myClass<T1,T2>::show()

{

     cout<<"I="<<I<<", J="<<J<<endl;

}

#endif

// Test.cpp

#include <iostream>

#include "ClassTemplate.h"

using std::cout;

using std::endl;

void main()

{

     myClass<int,int> class1(3,5);

     class1.show();

     myClass<int,char> class2(3,'a');

     class2.show();

     myClass<double,int> class3(2.9,10);

     class3.show();

     system("PAUSE");

}

最后結果顯示:

 

4.非類型模版參數

一般來說,非類型模板參數可以是常整數(包括枚舉)或者指向外部鏈接對象的指針。

那么就是說,浮點數是不行的,指向內部鏈接對象的指針是不行的。


template<typename T, int MAXSIZE>

class Stack{

Private:

       T elems[MAXSIZE];

};

Int main()

{

       Stack<int, 20> int20Stack;

       Stack<int, 40> int40Stack;

};

posted @ 2009-04-03 11:14 abilitytao 閱讀(14807) | 評論 (16)編輯 收藏

CONST使用解析(轉)

看到const 關鍵字,C++程序員首先想到的可能是const 常量。這可不是良好的條件反射。如果只知道用const 定義常量,那么相當于把火藥僅用于制作鞭炮。const 更大的魅力是它可以修飾函數的參數、返回值,甚至函數的定義體。

const 是constant 的縮寫,“恒定不變”的意思。被const 修飾的東西都受到強制保護,可以預防意外的變動,能提高程序的健壯性。所以很多C++程序設計書籍建議:“Use const whenever you need”。


1.用const 修飾函數的參數

如果參數作輸出用,不論它是什么數據類型,也不論它采用“指針傳遞”還是“引用傳遞”,都不能加const 修飾,否則該參數將失去輸出功能。const 只能修飾輸入參數:

如果輸入參數采用“指針傳遞”,那么加const 修飾可以防止意外地改動該指針,起到保護作用。

例如StringCopy 函數:

void StringCopy(char *strDestination, const char *strSource);

其中strSource 是輸入參數,strDestination 是輸出參數。給strSource 加上const修飾后,如果函數體內的語句試圖改動strSource 的內容,編譯器將指出錯誤。

如果輸入參數采用“值傳遞”,由于函數將自動產生臨時變量用于復制該參數,該輸入參數本來就無需保護,所以不要加const 修飾。

例如不要將函數void Func1(int x) 寫成void Func1(const int x)。同理不要將函數void Func2(A a) 寫成void Func2(const A a)。其中A 為用戶自定義的數據類型。

對于非內部數據類型的參數而言,象void Func(A a) 這樣聲明的函數注定效率比較底。因為函數體內將產生A 類型的臨時對象用于復制參數a,而臨時對象的構造、復制、析構過程都將消耗時間。

為了提高效率,可以將函數聲明改為void Func(A &a),因為“引用傳遞”僅借用一下參數的別名而已,不需要產生臨時對象。但是函數void Func(A &a) 存在一個缺點:

“引用傳遞”有可能改變參數a,這是我們不期望的。解決這個問題很容易,加const修飾即可,因此函數最終成為void Func(const A &a)。

以此類推,是否應將void Func(int x) 改寫為void Func(const int &x),以便提高效率?完全沒有必要,因為內部數據類型的參數不存在構造、析構的過程,而復制也非???,“值傳遞”和“引用傳遞”的效率幾乎相當。

問題是如此的纏綿,我只好將“const &”修飾輸入參數的用法總結一下。

對于非內部數據類型的輸入參數,應該將“值傳遞”的方式改為“const 引用傳遞”,目的是提高效率。例如將void Func(A a) 改為void Func(const A &a)。

對于內部數據類型的輸入參數,不要將“值傳遞”的方式改為“const 引用傳遞”。否則既達不到提高效率的目的,又降低了函數的可理解性。例如void Func(int x) 不應該改為void Func(const int &x)。


2 .用const 修飾函數的返回值
如果給以“指針傳遞”方式的函數返回值加const 修飾,那么函數返回值(即指針)的內容不能被修改,該返回值只能被賦給加const 修飾的同類型指針。例如函數
const char * GetString(void);
如下語句將出現編譯錯誤:
char *str = GetString();
正確的用法是
const char *str = GetString();
如果函數返回值采用“值傳遞方式”,由于函數會把返回值復制到外部臨時的存儲單元中,加const 修飾沒有任何價值。
例如不要把函數int GetInt(void) 寫成const int GetInt(void)。
同理不要把函數A GetA(void) 寫成const A GetA(void),其中A 為用戶自定義的數據類型。
如果返回值不是內部數據類型,將函數A GetA(void) 改寫為const A & GetA(void)的確能提高效率。但此時千萬千萬要小心,一定要搞清楚函數究竟是想返回一個對象的“拷貝”還是僅返回“別名”就可以了,否則程序會出錯。
函數返回值采用“引用傳遞”的場合并不多,這種方式一般只出現在類的賦值函數中,目的是為了實現鏈式表達。

例如:
class A
{
A & operate = (const A &other); // 賦值函數
};
A a, b, c; // a, b, c 為A 的對象

a = b = c; // 正常的鏈式賦值
(a = b) = c; // 不正常的鏈式賦值,但合法
如果將賦值函數的返回值加const 修飾,那么該返回值的內容不允許被改動。上例中,語句 a = b = c 仍然正確,但是語句 (a = b) = c 則是非法的。


3. const 成員函數
任何不會修改數據成員(即函數中的變量)的函數都應該聲明為const 類型。如果在編寫const 成員函數時,不慎修改了數據成員,或者調用了其它非const 成員函數,編譯器將指出錯誤,這無疑會提高程序的健壯性。以下程序中,類stack 的成員函數GetCount 僅用于計數,從邏輯上講GetCount 應當為const 函數。編譯器將指出GetCount 函數中的錯誤。
class Stack
{
public:
void Push(int elem);
int Pop(void);
int GetCount(void) const; // const 成員函數
private:
int m_num;
int m_data[100];
};
int Stack::GetCount(void) const
{
++ m_num; // 編譯錯誤,企圖修改數據成員m_num
Pop(); // 編譯錯誤,企圖調用非const 函數
return m_num;
}
const 成員函數的聲明看起來怪怪的:const 關鍵字只能放在函數聲明的尾部,大概是因為其它地方都已經被占用了。
關于Const函數的幾點規則:

a. const對象只能訪問const成員函數,而非const對象可以訪問任意的成員函數,包括const成員函數.
b. const對象的成員是不可修改的,然而const對象通過指針維護的對象卻是可以修改的.
c. const成員函數不可以修改對象的數據,不管對象是否具有const性質.它在編譯時,以是否修改成員數據為依據,進行檢查.
e. 然而加上mutable修飾符的數據成員,對于任何情況下通過任何手段都可修改,自然此時的const成員函數是可以修改它的

posted @ 2009-04-03 11:01 abilitytao 閱讀(240) | 評論 (0)編輯 收藏

ACM模板之—循環隊列(模板類)

//BEGIN_TEMPLATE_BY_ABILITYTAO_ACM
#include<cassert>
#include
<iostream>
#include
<cmath>
#include
<algorithm>
using namespace std;

template
<class T>
class Queue
{
private:
    
int front,rear;
    T 
*element;
    
int maxsize;
public:
    Queue(
int n=10000);
    
~Queue(){delete []element;}
    
void push_back(T item);
    T pop_front();
    T get_front();
    
void clear(){front=rear=0;}
    
bool isempty(){return front==rear;}
    
bool isfull(){return (rear+1)%maxsize==front;}
    
int lenth(){return (rear-front+maxsize)%maxsize;}
}
;


template
<class T>
Queue
<T>::Queue(int n=10000)
{
    front
=0;
    rear
=0;
    maxsize
=n;
    element
=new T[maxsize];
}


template
<class T>
void Queue<T>::push_back( T item)
{

    assert(
!isfull());
    rear
=(rear+1)%maxsize;
    element[rear]
=item;
}


template
<class T>
T Queue
<T>::pop_front()
{
    assert(
!isempty());
    front
=(front+1)%maxsize;
    
return element[front];
}


template
<class T>
T Queue
<T>::get_front()
{

    assert(
!isempty());
    
return element[(front+1)%maxsize];
}

//END_TEMPLATE_BY_ABILITYTAO_ACM






/////////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    Queue
<int> test(10);
    
int n;
    
int i;
    
for( i=1;i<=9;i++)
        test.push_back(i);
    n
=test.get_front();
    n
=test.lenth();
    test.clear();
    n
=test.lenth();
    
return 0;
}

雖然這個模板已經通過簡單測試,不過我還是有幾問題不太明白,希望大家能幫我解釋一下:
這個隊列中的數組寫成動態形式是一個不錯的想法,但是調試的時候比較麻煩,因為debug時在test.element下面看不到任何數組元素。不知道該怎么解決?

posted @ 2009-04-02 20:57 abilitytao 閱讀(1902) | 評論 (8)編輯 收藏

數據結構作業之-拓撲排序(C++實現)

//張宏數據結構作業之__拓撲排序
//Get Guidance by Mr ZhangHong
//Student:abilitytao

#include
<iostream>
#include
<cmath>
#include
<cstdio>
#include
<algorithm>
#include
<stack>
using namespace std;
#define MAX 9999

stack
<int>mystack;
int indegree[MAX];

struct node 
{
    
int adjvex;
    node
* next;
}
adj[MAX];

int Create(node adj[],int n,int m)//鄰接表建表函數,n代表定點數,m代表邊數
{
    
int i;
    node 
*p;
    
for(i=1;i<=n;i++)
    
{
        
        adj[i].adjvex
=i;
        adj[i].next
=NULL;
    }

    
for(i=1;i<=m;i++)
    
{
        cout
<<"請輸入第"<<i<<"條邊:";
        
int u,v;
        cin
>>u>>v;
        p
=new node;
        p
->adjvex=v;
        p
->next=adj[u].next;
        adj[u].next
=p;
    }

    
return 1;
}



void print(int n)//鄰接表打印函數
{
    
int i;
    node 
*p;
    
for(i=1;i<=n;i++)
    
{
        p
=&adj[i];
        
while(p!=NULL)
        
{
            cout
<<p->adjvex<<' ';
            p
=p->next;
        }

        cout
<<endl;
    }

}


void topsort(node adj[],int n)
{

    
int i;
    node 
*p;
    memset(indegree,
0,sizeof(indegree));
    
for(i=1;i<=n;i++)
    
{

        p
=adj[i].next;
        
while(p!=NULL)
        
{
            indegree[p
->adjvex]++;
            p
=p->next;
        }

    }

    
for(i=1;i<=n;i++)
    
{

        
if(indegree[i]==0)
            mystack.push(i);
    }

    
int count=0;
    
while(mystack.size()!=0)
    
{

        i
=mystack.top();
        mystack.pop();
        cout
<<i<<' ';
        count
++;
        
for(p=adj[i].next;p!=NULL;p=p->next)
        
{
            
int k=p->adjvex;
            indegree[k]
--;
            
if(indegree[k]==0)
                mystack.push(k);
        }

    }

    cout
<<endl;
    
if(count<n)cout<<"有回路"<<endl;
}




int main()
{
    
int n;
    
int m;
    cout
<<"請輸入頂點數及邊數:";
    cin
>>n>>m;
    Create(adj,n,m);
    cout
<<"輸入的鄰接表為:"<<endl;
    print(n);
    cout
<<"拓撲排序結果為:"<<endl;
    topsort(adj,n);
    system(
"pause");
    
return 0;
}


posted @ 2009-04-01 17:45 abilitytao 閱讀(3821) | 評論 (2)編輯 收藏

數據結構作業之鄰接表的插入和刪除

/*張宏數據結構(第七章_圖)作業:
題目描述:在有向圖中
(1)增加一條弧  Addarc(adj,u,v)
(2)刪除一條弧  Delarc(adj,u,v)
*/

#include
<iostream>
#include
<cmath>
#include
<cstdio>
#include
<algorithm>
#include
<string>
using namespace std;
#define MAX 1000000

struct node 
{
    
int adjvex;
    node
* next;
}
adj[MAX];

int Create(node adj[],int n,int m)//鄰接表建表函數,n代表定點數,m代表邊數
{
    
int i;
    node 
*p;
    
for(i=1;i<=n;i++)
    
{

        adj[i].adjvex
=i;
        adj[i].next
=NULL;
    }

    
for(i=1;i<=m;i++)
    
{
        cout
<<"請輸入第"<<i<<"條邊:";
        
int u,v;
        cin
>>u>>v;
        p
=new node;
        p
->adjvex=v;
        p
->next=adj[u].next;
        adj[u].next
=p;
    }

    
return 1;
}



int  Addnode(int u,int v)//此函數用于增加邊
{

    node 
*p;
    p
=new node;
    p
->adjvex=v;
    p
->next=adj[u].next;
    adj[u].next
=p;
    
return 1;
}



int deletenode(int u,int v)//此函數用于邊的刪除
{

    node 
*P=adj[u].next;
    node 
*q=&adj[u];
    
while(P!=NULL)
    
{

        
if(P->adjvex==v)
        
{
            q
->next=P->next;
            delete P;
            
break;
        }


    }

    
return 1;
}


void print(int n)//鄰接表打印函數
{
    
int i;
    node 
*p;
    
for(i=1;i<=n;i++)
    
{
        p
=&adj[i];
        
while(p!=NULL)
        
{
            cout
<<p->adjvex<<' ';
            p
=p->next;
        }

        cout
<<endl;
    }

}



int main()
{

    
int n;
    
int m;
    cout
<<"                         數據結構第七章(圖)作業"<<endl;
    cout
<<"                                    "<<endl;
    cout
<<"題目描述:"<<endl;
    cout
<<"有向圖中(1)增加一條弧  Addarc(adj,u,v)"<<endl;
    cout
<<"        (2)刪除一條弧  Delarc(adj,u,v)"<<endl<<endl<<endl;
    cout
<<"請輸入頂點的數目: ";
    cin
>>n;
    cout
<<"請輸入鄰邊的數目: ";
    cin
>>m;
    Create(adj,n,m);
    cout
<<"輸入的鄰接表為:"<<endl;
    print(n);
    
int u,v;
    cout
<<"接下來執行添加操作,請輸入邊u,v(注意請不要和上表中的邊重復):";
    cin
>>u>>v;
    Addnode(u,v);
    cout
<<"此時鄰接表為:"<<endl;
    print(n);
    cout
<<"接下來執行刪除操作,請輸入邊u,v:";
    cin
>>u>>v;
    deletenode(u,v);
    cout
<<"此時鄰接表為:"<<endl;
    print(n);
    cout
<<"演示結束,謝謝您的使用"<<endl;
    
return 0;
}


posted @ 2009-03-30 21:27 abilitytao 閱讀(1237) | 評論 (0)編輯 收藏

僅列出標題
共42頁: First 32 33 34 35 36 37 38 39 40 Last 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲第一中文字幕在线观看| 国产精品欧美经典| 美女主播视频一区| 一区二区三区国产在线| 精品成人免费| 欧美日韩免费一区| 亚洲午夜一区| 这里只有精品视频| 亚洲欧美日韩中文视频| 亚洲图片欧洲图片日韩av| 亚洲精品国精品久久99热| 欧美与欧洲交xxxx免费观看| 亚洲理论在线| 欧美一区二区日韩| 亚洲国产精品国自产拍av秋霞| 国产亚洲欧美一级| 在线成人激情黄色| 在线综合视频| 麻豆91精品91久久久的内涵| 亚洲国产精品电影| 亚洲午夜久久久久久尤物 | 欧美一区在线视频| 欧美在线播放高清精品| 久久成人这里只有精品| 免费h精品视频在线播放| 91久久精品美女高潮| 一级成人国产| 麻豆精品网站| 欧美不卡视频一区| 国产在线播放一区二区三区| 亚洲精选视频免费看| 欧美一区二区免费观在线| 欧美成人视屏| 蜜桃久久精品乱码一区二区| 国产精品欧美风情| 亚洲小少妇裸体bbw| 亚洲精品人人| 欧美日韩一区二| 最近看过的日韩成人| 久久国产日韩欧美| 久久精品一本| 在线精品视频一区二区三四| 欧美中在线观看| 亚洲欧美日韩中文视频| 国产一区二区成人| 性色av一区二区三区| 亚洲激情成人网| 欧美专区福利在线| 亚洲午夜国产成人av电影男同| 女人色偷偷aa久久天堂| 欧美裸体一区二区三区| 国产一区二区三区免费不卡| 亚洲午夜在线观看| 一区二区三区精品| 欧美精品日日鲁夜夜添| 亚洲欧洲日本国产| 欧美高清不卡在线| 亚洲欧美三级伦理| 亚洲精品国产精品国自产观看| 亚洲一区二区免费看| 欧美超级免费视 在线| 亚洲区第一页| 亚洲黄色毛片| 欧美日韩亚洲综合| 亚洲欧美一区二区激情| 亚洲一区在线免费| 国内综合精品午夜久久资源| 久久国产66| 久久久久久精| 99精品视频一区二区三区| 亚洲精品美女在线| 国产精品一区二区在线观看网站| 在线观看久久av| 亚洲精品资源美女情侣酒店| 欧美午夜电影完整版| 香蕉成人伊视频在线观看 | 亚洲国产激情| 欧美日韩精品一区二区在线播放 | 亚洲美女性视频| 一本色道88久久加勒比精品| 国产三级欧美三级| 亚洲老司机av| 亚洲麻豆av| 久久精品女人天堂| 亚洲欧洲午夜| 久久精品综合| 欧美在线综合视频| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲久久成人| 韩日精品中文字幕| 在线综合亚洲| 亚洲欧美日韩精品综合在线观看| 奶水喷射视频一区| 欧美黄色网络| 亚洲人成在线播放网站岛国| 久久久久久有精品国产| 亚洲经典一区| 欧美呦呦网站| 欧美一级视频精品观看| 男女精品网站| 亚洲欧洲综合另类| 亚洲免费大片| 国产精品国产三级国产专区53| 亚洲美女中文字幕| 午夜一级在线看亚洲| 国产一区二区成人久久免费影院| 亚洲欧洲日产国产网站| 一区二区三区 在线观看视| 欧美乱人伦中文字幕在线| 亚洲毛片在线| 老**午夜毛片一区二区三区| 在线观看欧美一区| 欧美日韩一区视频| 久久精品综合一区| 亚洲天堂网在线观看| 美女视频黄免费的久久| 一本一本久久a久久精品牛牛影视| 国产综合视频| 性色av一区二区三区红粉影视| 最新国产乱人伦偷精品免费网站| 激情综合在线| 国产欧美精品日韩精品| 欧美激情综合五月色丁香小说| 一区二区三区偷拍| 亚洲电影视频在线| 久久在线免费视频| 午夜精品视频在线观看一区二区| 亚洲第一成人在线| 在线不卡中文字幕播放| 欧美日韩国产在线播放网站| 久久久www成人免费精品| 亚洲在线观看免费| 久久爱www| 美腿丝袜亚洲色图| 久久噜噜亚洲综合| 国产一区二区高清不卡| 国产在线视频欧美| 激情另类综合| 亚洲日韩视频| 亚洲女优在线| 久久成年人视频| 久久综合九色九九| 欧美成人午夜激情| 蜜桃av一区二区| 欧美激情中文字幕乱码免费| 欧美成年人网| 国内外成人免费激情在线视频网站| 亚洲午夜久久久久久久久电影院 | 正在播放亚洲| 午夜精品国产精品大乳美女| 开心色5月久久精品| 欧美激情bt| 亚洲欧美国产精品va在线观看| 欧美中文字幕在线视频| 美女精品在线| 在线视频欧美日韩| 久久精品成人欧美大片古装| 欧美va日韩va| 激情校园亚洲| 99热这里只有成人精品国产| 久久综合激情| 亚洲精品综合在线| 一区二区三区在线看| 一区二区三区你懂的| 亚洲伊人伊色伊影伊综合网| 欧美大色视频| 欧美成人午夜免费视在线看片| 欧美视频一区在线| 亚洲一区二区三区精品视频| 亚洲天堂av电影| 在线欧美一区| 一区二区三区视频免费在线观看| 国产精品igao视频网网址不卡日韩 | 欧美激情一区二区久久久| 欧美大片91| 欧美一区二区三区视频免费播放 | 亚洲一区视频| 亚洲精品小视频| 羞羞视频在线观看欧美| 亚洲经典一区| 久久久久亚洲综合| 亚洲欧美国产不卡| 久久影视精品| 久久久精品国产99久久精品芒果| 欧美日本一区| 麻豆成人91精品二区三区| 欧美视频四区| 亚洲日本免费| 最新亚洲电影| 免费不卡亚洲欧美| 久热精品在线| 怡红院精品视频在线观看极品| 正在播放欧美一区| 午夜精品一区二区三区在线播放| 欧美大片在线观看一区| 欧美成年人视频网站| 久久免费偷拍视频| 久久免费视频在线观看| 中文国产成人精品久久一| 欧美日本不卡|