| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 573 人关注过本帖
标题:有空的哥哥姐姐们帮忙改下程序,感激涕零
只看楼主 加入收藏
一抹浅笑
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-7-3
结帖率:100%
收藏
 问题点数:0 回复次数:2 
有空的哥哥姐姐们帮忙改下程序,感激涕零

给定一个有向图,代表一个由特定偏序关系的导出的哈斯图,指定一个结点子集,求解该子集对应的极大元,极小元,最大元,最小元,上界,下界,上确界,
下确界八种特殊元素。
高手们 给个代码  感激涕零
我编的算法可能有错  功能不能全部实现 希望大家帮忙下  1 没有指定结点子集  2  8种功能也不能全部实现  
谢谢
附上我的代码
#include <stdio.h>
#include <malloc.h>
  
 
#define max 20 //最大顶点个数
  
int visited[max];

int flag=0,l1=0,l2=0;
char real[2*max];
int RE=0;
char Max;
//图的邻接矩阵存储结构
typedef struct{
  char *vexs; //顶点向量
  int arcs[max][max]; //邻接矩阵
  int vexnum,arcnum; //图的当前顶点数和弧数
}Graph;
  
  
//图G中查找元素c的位置
int Locate(Graph G,char c){
  for(int i=0;i<G.vexnum;i++)
  if(G.vexs[i]==c) return i;
  return -1;
}
  
//创建有向图
void CreateUDN(Graph &G){
  int i,j,s1,s2;
  char a,b,temp;
  printf("输入顶点数和弧数:\n");
  scanf("%d%d",&G.vexnum,&G.arcnum);
  temp=getchar(); //接收回车
  G.vexs=(char *)malloc(G.vexnum*sizeof(char)); //分配顶点数目
  
  printf("输入%d个顶点.\n",G.vexnum);
  for(i=0;i<G.vexnum;i++){ //初始化顶点
    printf("输入顶点%d:",i);
    scanf("%c",&G.vexs[i]);
    temp=getchar(); //接收回车  
  }
  
  for(i=0;i<G.vexnum;i++) //初始化邻接矩阵
    for(j=0;j<G.vexnum;j++)
      G.arcs[i][j]=0;
  
  printf("输入%d条弧.\n",G.arcnum);
  for(i=0;i<G.arcnum;i++){ //初始化弧
    printf("输入弧%d:",i);
    scanf("%c %c",&a,&b); //输入一条边依附的顶点
    temp=getchar(); //接收回车
    s1=Locate(G,a);
    s2=Locate(G,b);
    G.arcs[s1][s2]=1;
  }
}
  
//图G中顶点k的第一个邻接顶点
int FirstVex(Graph G,int k)
{
  if(k>=0 && k<G.vexnum)
  {
    for(int i=0;i<G.vexnum;i++)
      if(G.arcs[k][i]!=0) return i;
  }
  
    return -1;
}
  
//图G中顶点i的第j个邻接顶点的下一个邻接顶点
int NextVex(Graph G,int i,int j){
    int k;
  if(i>=0 && i<G.vexnum && j>=0 && j<G.vexnum)
  { //i,j合理 [Page]
    for( k=j+1;k<G.vexnum;k++)
      if(G.arcs[i][k]!=0) return k;
  }
      return -1;
}
  
//深度优先遍历
void DFS(Graph G,int k)
{
  int i;
  if(k==-1)
  { //第一次执行DFS时,k为-1
    for(i=0;i<G.vexnum;i++)
      if(visited[i]==0) DFS(G,i); //对尚未访问的顶点调用DFS
  }
  else
  {  
    visited[k]=1;
   
    printf("%c ",G.vexs[k]);real[RE++]=G.vexs[k]; //访问第k个顶点
    for(i=FirstVex(G,k);i>=0;i=NextVex(G,k,i))
      if(visited[i]==0) DFS(G,i); //对k的尚未访问的邻接顶点i递归调用DFS
      else printf("*");
      real[RE++]='*';
      
  }
}

void print(Graph G)
{
    int i,j,k;
    int len1=0,len_=0,len3=0;
    while(real[RE-1]=='*') RE--;
    printf("**%d**\n",RE);
    int flag2=0;
    int sum=0;
    printf("\n遍历后的串:");
    for(int kk=0;kk<RE;kk++)
        printf("%c",real[kk]);
    printf("\n");
    printf("极小值是::");
    for( i=0;i<G.vexnum;i++)
    {
for(int j=0;j<G.vexnum;j++)
{
    if(G.arcs[j][i]==1)  {flag2=1;break;};
}
if(flag2==0) {sum++;printf("%c ",G.vexs[i]);}
flag2=0;
    }
    flag2=0;
    printf("极大值是::");
        for( i=0;i<G.vexnum;i++)
    {
for(int j=0;j<G.vexnum;j++)
{
    if(G.arcs[i][j]==1)  {flag2=1;break;};
}
if(flag2==0) {printf("%c ",G.vexs[i]);}
flag2=0;
    }
    printf("\n");

            for(i=0;i<RE;i++)
            {
                for(j=i;real[j]!='*'&&j<RE;j++,i++)
            {
                len1++;len_=0;
            }
                len_++;    //continue;
                if(len3<=len1)
                    if(0<=(len1-len_))
                    {  len3+=len1-len_+1;Max=real[j-1];len1=0; }

            }

            if(sum>1) printf("没有最小元       ");
            else printf("最小元是%c  ",G.vexs[0]);
            if((len3)==(len1+len_))  printf("没有最da元");
            else printf("最大元是%c \n",Max);
   
   

}
  
//主函数
void main()
{
  int i,j;
  Graph G;
  CreateUDN(G);
  
  for(i=0;i<G.vexnum;i++)
  visited[i]=0;
  DFS(G,-1);
   print(G);
  printf("\n程序结束.\n");
}
  
搜索更多相关主题的帖子: 感激涕零 
2010-07-08 19:42
一抹浅笑
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-7-3
收藏
得分:0 
急用啊 帮帮忙
2010-07-08 19:45
一抹浅笑
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-7-3
收藏
得分:0 
这么冷清
2010-07-08 20:48
快速回复:有空的哥哥姐姐们帮忙改下程序,感激涕零
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023267 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved