有A、B、C、D、E五个点,输入n条边,保存在文件a.dat中,再根据文件中边的信息建立邻接表
示例输入:
A->B
A->C
C->D
B->E
D->E
示例输入:
A->B
A->C
C->D
B->E
D->E
0->0
#include <cstdio>
#include <string>
#include <cstdlib>
using namespace std;
struct node
{
char str[10];
};
int main()
{
FILE *fp;
struct node s[100];//暂时保存输入的边的信息
int a[5][5];//邻接表
int i,j,k,n=0;
memset(a,0,sizeof(a));
while(1)//输入边的信息到“0->0”时结束
{
scanf("%s",s[n].str);
if(strcmp(s[n].str,"0->0")==0)
break;
n++;
}//n记录边的个数
fp=fopen("d:\\a.dat","wb");//以“写”的方式打开二进制文件
if(fp==NULL)
return -1;
fwrite(s,sizeof(struct node),1,fp);//将保存边信息的数组s写入到文件中
fclose(fp);
fp=fopen("d:\\a.dat","rb");//以“读”的方式打开二进制文件
k=n;
while(n)
{
fread(&s[k-n],sizeof(struct node),1,fp);//从依次读出文件中的信息建立邻接表
i=s[k-n].str[0]-'A';
j=s[k-n].str[3]-'A';
a[i][j]++;
a[j][i]++;
n--;
}
fclose(fp);
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
if(j==4)
printf("%d\n",a[i][j]);
else
printf("%d ",a[i][j]);
}
return 0;
}