# include <stdlib.h>
# include <iostream.h>
# define zhi 20//最都能存放結點的個數
int diannum;//存放頂點的個數
//存放頂點資訊和跟該點有關係的下一個頂點的指標
struct dian
{
char data;//存放頂點的資訊
struct bian *next;//存放邊的地址
};
//存放頂點和頂點的關係的值
struct bian
{
int data;//存放該頂點在一維數組中的下標
struct bian *next;//存放邊的地址
};
//初始化圖
void chushihua(struct dian *&tu)
{
int i;
tu=(struct dian *)malloc(zhi * sizeof(struct dian));//為圖開闢相應的空間
for(i=0;i<zhi;i++)
(tu+i)->next=NULL;//賦初值
}
//圖資訊的輸入
void shuru(struct dian *&tu)
{
int i;
int k;
int j;//存放標誌
struct bian *p;
cout<<"請輸入要輸入圖的頂點的總數:";
cin>>diannum;
//頂點資訊的輸入操作
cout<<"\n";
for(i=0;i<diannum;i++)
{
cout<<"請輸入第"<<i+1<<"頂點的資訊:";
cin>>(tu+i)->data;
}
cout<<"頂點資訊輸入完畢!";
//頂點和頂點關係的輸入
for(i=0;i<diannum;i++)
{
k=1;//一個標誌
cout<<"\n\n請輸入可以和第"<<i+1<<"個頂點相通的所有頂點的序號!\n";
cout<<"請輸入第"<<k<<"個頂點的序號(0為退出):";
cin>>j;
while(j!=0)
{
if(k==1)//響應標誌的操作
{
(tu+i)->next=(struct bian *)malloc(sizeof(struct bian));
p=(tu+i)->next;
p->data=j;
p->next=NULL;
}
else
{
p->next=(struct bian *)malloc(sizeof(struct bian));
p=p->next;
p->data=j;
p->next=NULL;
}
k=k+1;
cout<<"請輸入第"<<k<<"個頂點的序號(0為退出):";
cin>>j;
}
}
cout<<"頂點和頂點的關係輸入完畢!\n\n";
}
//圖的資訊的輸出
void shuchu(struct dian *tu)
{
int i;
struct bian * p;
cout<<"圖的資訊的輸出:\n";
//中心思想:從第一個頂開始,輸出所有和第一個頂點直接相連的頂點
for(i=0;i<diannum;i++)
{
cout<<"頂點"<<(tu+i)->data<<"和那些頂點是直接相連的關係:";
p=(tu+i)->next;
while(p!=NULL)
{
cout<<(tu+i)->data<<"----"<<(tu+(p->data-1))->data<<" ";
p=p->next;
}
cout<<"\n";
}
}
//主函數
void main()
{
struct dian * tu;//定義圖的頭
int option;//存放使用者的操作
chushihua(tu);//給圖的頭分配相應的空間,並給相應的項賦初值
option=0;
while(option!=3)
{
cout<<"\n 菜單\n\n";
cout<<" 1、圖的輸入\n";
cout<<" 2、圖的輸出\n";
cout<<" 3、退出\n\n";
cout<<"請選擇操作:";
cin>>option;
switch(option)
{
case 1:
shuru(tu);
break;
case 2:
shuchu(tu);
break;
case 3:
break;
default:
break;
}
}
}
心得:標記的運用!