編一 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