編一 C程序
和集合B的一串整數(以
並以由小到大的次序輸出A與B的交集中的所有整數(輸入整數時
*/
//注意調試程序時要多輸入重復數據調試;本程序是根據青龍提供的程序改編
#include
#include
void BuCountbbleSort(int r[]
{//冒泡排序
int i
int exchange;
for(i=
{
exchange=
for(j=n
if(r[j+ { k=r[j+1]; r[j+1]=r[j]; r[j]=k; exchange=1; } if(!exchange) break; } } int BingJi(int m[],int n[],int l[],int Countaa,int Countbb) {//求集合的並集 int i=0,j=0,k=0; while(i<=Countaa&&j<=Countbb) { if(m[i] {//如果 m[i] l[k]=m[i]; k++; i++; }//endif else if(m[i]>n[j]) {//如果 m[i]>n[j]則取小的值n[j],然後j++; l[k]=n[j]; k++; j++; }//end elseif else {//如果 m[i]==n[j],可以任取一個值,然後i++;j++; l[k]=m[i]; k++; i++; j++; }//endelse }//endwhile if(i>Countaa) {//如果i>Countaa,即數組m[i]中的元數個數較少, //則把n[j]中的剩余元素,都付給l[]。TW.WinGWIt.COm while(j<=Countbb) { l[k]=n[j]; j++; k++; }//endwhile }//endif if(j>Countbb) {//如果j>Countbb,即數組n[i]中的元數個數較少, //則把m[j]中的剩余元素,都付給l[]。 while(i<=Countaa) { l[k]=m[i]; i++; k++; }//endwhile }//endif return k;//返回生成的數組的元數個數 }//end BuCountbbleSort int JiaoJi(int m[],int n[],int l[],int Countaa,int Countbb) {//求集合的交集 /////////////////////////////////// //消除數組m[]中的重復元素 int w,x,y; for(w=0;w<=Countaa;w++) { for(x=w+1;x<=Countaa;x++) { if(m[w]==m[x]) { Countaa--; for(y=x;y<=Countaa;y++) { m[y]=m[y+1]; }//endfor x--; }//endif }//endfor }//endfor /* //測試消除數組中的重復元素的效果用下列循環輸出 int z; for(z=0;z<=Countaa;z++) { printf("%d",m[z]); } printf("\n"); */ //消除結束 /////////////////////////////////// /////////////////////////////////// //求交集 int i=0,j=0,k=0; while(i<=Countaa) { for(j=0;j<=Countbb;j++) {//用集合的第一個元素分別和另一個集合的各元素相比較 //然後再用第二個元素(直到最後一個元素)和另一個集合的各元素相比較 if(m[i]==n[j]) {//如果有相同的就保存到l[]中,這樣同時消掉了n[]中的重復元素 l[k]=m[i]; k++; break; }//endif }//endfor i++; }//endwhile //求交集結束 ////////////////////////////////// return k; } void main() { int a[1000], b[1000],c[2000]; int exchange=0; int i,CountA,CountB,CountC; printf("input a\n"); for(i=0;i<=1000;i++) { scanf("%d",&a[i]); if(a[i]==-9999) break; }//endfor CountA=i-1; BuCountbbleSort(a,CountA);//先將集合A排序 printf("\ninput b\n"); for(i=0;i<=1000;i++) { scanf("%d",&b[i]); if(b[i]==-9999) break; }//endfor CountB=i-1; BuCountbbleSort(b,CountB);//集合B排序 // CountC=BingJi(a,b,c,CountA,CountB); CountC=JiaoJi(a,b,c,CountA,CountB); printf("\n\n"); for(i=0;i<=CountC-1;i++) { printf("%d ",c[i]); } printf("\n"); } 編一 C程序,它能根據讀入的數據構造有向圖G,並輸出G的DFS遍歷序列(從V0開始),圖的輸入形式為n V0 Vi0 V1 Vi1 V2 Vi2...Vi Vin -1 -1(-1,-1為輸入結束標記,其余的值都>=0且 (注:程序的可執行文件名必須是 e3.exe) #include typedef enum {False,True} Boolean; int G[100][100]; int n; void CreatG() /*建立圖的鄰接矩陣G[][]*/ {int i,j; printf("Input the number of the node:"); scanf("%d",&n); printf("\n"); for (i=0;i for (j=0;j G[i][j]=0; do { scanf("%d %d",&i,&j); G[i][j]=1; }while ((i!=-1)&&(j!=-1)); } void TopSort() /*拓撲排序,輸出拓撲序列*/ { int i,j; int degree[100]; /*按照無前驅頂點優先思想,degree[]存放個節點的入度.*/ Boolean visited[100],flag=True; printf("The Topolgical Order as follow:"); for (i=0;i { degree[i]=0; visited[i]=False; } printf("\n"); while(flag==True) { for (i=0;i for (j=0;j degree[i]=G[j][i]+degree[i]; i=0; while ((i if (i {printf(" %d",i); visited[i]=True; for(j=0;j {G[i][j]=0; degree[j]=0;} } else flag=False; } } main() { CreatG(); TopSort(); }
From:http://tw.wingwit.com/Article/program/sjjg/201311/23612.html