学历改变命运
24小时客服:4008135555/010-82335555
当前位置:首页> 历年试题 > 北大“数据结构”上机考试题(04年11月18)

北大“数据结构”上机考试题(04年11月18)

2006年06月20日    来源: 北京自考热线   字体:   打印
准考证

  1、求拓朴排序后结果及用矩阵表示……输入形式为:n  1  2  1 3 ……(就是上机练习题上的哪个题,不过多加了一个用矩阵表示)……

  2、输入一串整数,以相反次序输出

  第1题我做的答案是这样的,第2题太简单就不用了。

  //有的未加判断,矩阵输出及拓扑排序

#include <stdio.h>
#include <malloc.h>
#include <iostream.h>
#define MAX 100

typedef struct {
int arcs[MAX][MAX];
int vexnum;
}Mgraph;

void input(Mgraph *mgraph,int i,int *count1)
{
int a,b,c1=0;
for(int j=0;j<i;j++)
  for(int k=0;k<i;k++)
   mgraph->arcs[j][k]=0;
  while(1){
   printf("输入(i j),(-1 -1)结束:");
   scanf("%d%d",&a,&b);
   if(a==-1 && b==-1)
    break;
   else
   {
    mgraph->arcs[a][b]=1;continue;
   }
  }
  for (int k=0;k<i;k++){
   int c=0;
   for(int m=0;m<i;m++){
    if(mgraph->arcs[m][k]==1)
     c++;
   }
    count1[k]=c;
  }
  printf("\n矩阵为:\n");
  for(int l=0;l<i;l++)
   for(int m=0;m<i;m++){
     printf("%3d",mgraph->arcs[l][m]);
     c1=c1+1;
     if(c1==i){
      printf("\n");
      c1=0;
     }
   }
}

//拓扑排序
void topsort(Mgraph * mgraph,int i,int *count){
int a,b,c=0,s=-1;
for(a=0;a<i;a++){
  if(count[a]==0){
   count[a]=s;
   s=a;
  }
}
while(s!=-1){
  printf("V(%d)  ",s);
  c++;
  a=s;
  s=count[a];
  for(b=0;b<i;b++){
   if(mgraph->arcs[a][b]){
    count[b]--;
    if (count[b]==0){
     count[b]=s;
     s=b;
    }

   }

  }
}
}

void main(){
Mgraph mgraph;
int i;
printf("输入顶点个数:");
scanf("%d",&i);
int count1[MAX];
input(&mgraph,i,count1);
topsort(&mgraph,i,count1);

}

关注添加

扫码添加学习顾问

了解考试计划,进行学习规划
备战考试,获取试题及资料

扫码下载APP

海量历年试题、备考资料
免费下载领取

扫码进入微信小程序

每日练题巩固、考前模拟实战
免费体验自考365海量试题

免费题库

新人有礼
关闭