| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 586 人关注过本帖
标题:老出现无法该内存不能为written 怎么办啊,要交了各位大侠帮帮我啊
取消只看楼主 加入收藏
zhouzeping
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-6-21
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
老出现无法该内存不能为written 怎么办啊,要交了各位大侠帮帮我啊
#include <stdio.h>
#include<stdlib.h>
#define int_max 10000
#define inf 9999
#define max 20
//邻接矩阵定义
typedef struct ArcCell
{
int adj;
char *info;
}ArcCell,AdjMatrix[20][20];
typedef struct
{
char vexs[20];
AdjMatrix arcs;
int vexnum,arcnum;
}MGraph_L;

int LocateVex(MGraph_L G,char v)//查找顶点v的序号
{
int i=0;
while(G.vexs[i]!=v)
{
    ++i;
}
return i;
}

int createMGraph_L(MGraph_L &G)//创建图用邻接矩阵表示
{
char v1,v2;
int i,j,w;
printf("创建无向图\n");
printf("请输入无向图G的顶点数和弧数:");
scanf("%d %d",G.vexnum,G.arcnum);
for(i=0;i!=G.vexnum;++i)
{
    printf("输入顶点%d\n",i);
    scanf("%c",G.vexs[i]);
}
for(i=0;i!=G.vexnum;++i)
    for(j=0;j!=G.vexnum;++j)
    {
     G.arcs[i][j].adj=int_max;
     G.arcs[i][j].info=NULL;
    }
    printf("输入一条边依附的顶点和权:\n");
    for(int k=0;k!=G.arcnum;++k)
    {
   
     scanf("%c%c%d",&v1,&v2,&w);         //输入一条边依附的两点及权值
     i=LocateVex(G,v1);      //确定顶点V1和V2在图中的位置
     j=LocateVex(G,v2);
     G.arcs[i][j].adj=w;
     G.arcs[j][i].adj=w;
    }
    return G.vexnum;
}

typedef struct ArcNode              //弧结点
{
int adjvex;                     //该弧所指向的顶点的位置
struct ArcNode *nextarc;        //指向下一条弧的指针
//char *info;                     //该弧相关信息的指针
}ArcNode;
typedef struct vnode                //邻接链表顶点头接点
{
char data;                      //顶点信息
ArcNode *firstarc;              //指向第一条依附该顶点的弧的指针
}vnode,adjlist;
typedef struct                      //图的定义
{
adjlist vertices[max];
int vexnum,arcnum;              //图的当前顶点数和弧数
}ALGraph;

int CreateUDG(ALGraph &gra,MGraph_L G)//用邻接表存储图
{

int i=0,j=0;
ArcNode *arc,*tem,*p;
for(i=0;i!=G.vexnum;++i)
{
    gra.vertices[i].data=G.vexs[i];
    gra.vertices[i].firstarc=NULL;
}
for(i=0;i!=G.vexnum;++i)
{
    for(j=0;j!=G.vexnum;++j)
    {
     if(gra.vertices[i].firstarc==NULL)
     {
      if(G.arcs[i][j].adj!=int_max&&j!=G.vexnum)
      {
       arc=(ArcNode *)malloc(sizeof(ArcNode));
       arc->adjvex=j;
       gra.vertices[i].firstarc=arc;
       arc->nextarc=NULL;
       p=arc;
       ++j;
       while(G.arcs[i][j].adj!=int_max&&j!=G.vexnum)
       {
        tem=(ArcNode *)malloc(sizeof(ArcNode));
        tem->adjvex=j;   
        gra.vertices[i].firstarc=tem;
        tem->nextarc=arc;
        arc=tem;
        ++j;
       }
       --j;
      }
     }
     else
     {
      if(G.arcs[i][j].adj!=int_max&&j!=G.vexnum)
      {
       arc=(ArcNode *)malloc(sizeof(ArcNode));
       arc->adjvex=j;
       p->nextarc=arc;
       arc->nextarc=NULL;
       p=arc;
      }
   
   
     }
   
    }
}
gra.vexnum=G.vexnum;
gra.arcnum=G.arcnum;
printf("图G的邻接表创建成功!\n");
return 1;
}

typedef struct
{
int adjvex;
int lowcost;
}closedge;

int prim(int g[][max],int n)        //最小生成树PRIM算法
{
int lowcost[max],prevex[max]; //LOWCOST[]存储当前集合U分别到剩余结点的最短路径
                                 //prevex[]存储最短路径在U中的结点
int i,j,k,min;
for(i=2;i<=n;i++)               //n个顶点,n-1条边
{
    lowcost[i]=g[1][i];         //初始化
    prevex[i]=1;                //顶点未加入到最小生成树中
}
lowcost[1]=0;                   //标志顶点1加入U集合
for(i=2;i<=n;i++)               //形成n-1条边的生成树
{
    min=inf;
    k=0;
    for(j=2;j<=n;j++)           //寻找满足边的一个顶点在U,另一个顶点在V的最小边
     if((lowcost[j]<min)&&(lowcost[j]!=0))
     {
      min=lowcost[j];
      k=j;
     }
     printf("(%d,%d)%d\t",prevex[k]-1,k-1,min);
     lowcost[k]=0;           //顶点k加入U
     for(j=2;j<=n;j++)       //修改由顶点k到其他顶点边的权值
      if(g[k][j]<lowcost[j])
      {
       lowcost[j]=g[k][j];
       prevex[j]=k;
      }
      printf("\n");
}
return 0;
}

void list()
{
printf("……………………菜单……………………\n\n");
printf("0、创建无向图并用邻接表存储边信息…..\n");

printf("1、使用prim算法求最小生成树……………\n");
printf("2、退出系统…………………………………\n\n");
}

void main()
{
ALGraph G1;
MGraph_L G;
int i,d,g[20][20];
char y='y';
int k;
while(y=='y')
{
    list();
printf("请选择菜单:\n");
    scanf("%d",&k);
    switch(k)
    {
    case 0:
     d=createMGraph_L(G);
     CreateUDG(G1,G);
     break;
   
    case 1:
     for(i=0;i!=G.vexnum;++i)
      for(int j=0;j!=G.vexnum;++j)
       g[i+1][j+1]=G.arcs[i][j].adj;
     printf("prim:\n");
           prim(g,d);
     break;
    case 2:break;
     //exit(1);
    }
    printf("\n是否继续操作?y/n:");
    scanf("%c",&y);
}

}

搜索更多相关主题的帖子: 矩阵 written include return 
2011-06-21 13:53
zhouzeping
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-6-21
收藏
得分:0 
谁可以帮忙改一下?
2011-06-21 13:54
快速回复:老出现无法该内存不能为written 怎么办啊,要交了各位大侠帮帮我啊
数据加载中...
 
   



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

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