2 jj314145738 jj314145738 于 2017.09.06 16:20 提问

求解决一个c++类调用的问题 5C
c++

class Random
{
private:
static int n;
static vector list;
static char file[STR_LEN];

public:
static void Build();
static void BuildFromFile();
static int GetNode(int i);
};
struct Edge
{
int u,v,c;
double w1,w2;
};

class Graph
{
private:
static int n;
static int m;
static vector degree;
static vector indegree;
static vector outdegree;
static void qsort_edges(int h, int t);

public:
static void QuickSort(int p,int r);
static int partion(int p,int r);
static void insertsort_edges(int right);
static void merge_edges(int start, int middle, int left);
static void mergesort_edges(int start, int end);
static void merge(int start, int middle, int end);
static bool built;
static vector index;
static vector correspond;
static void Build();
static int GetN();
static int GetM();
static vector edges;
static int GetDegree(int node);
static int GetOutDegree(int node);
static int GetInDegree(int node);
static int GetNeighbor(int node);
static Edge GetEdge(int node, int idx);
static void BuildIC();
static void BuildWC();
static void Build2GC();
static void Build2WC();
static void Build2DWC();
static void BuildFromFile2DWC(char *file); //directed graph + wic
static void BuildFromFile2OIC(char *file);
static void BuildFromFile2DUC(char *file, double p);//directed graph + uic
static void BuildFromFile2WC();// undirected graph + wic
static void BuildFromFile2UC(char *file, double p);//undirected graph + uic
static void Build2IC();
static void sortEdges();

/*
static void Build2DIC(double, double);
static void Build2RIC(double, double);
static void Build2TIC(double, double, double);
static void Build2DT(double, double, double);
static void Build2T(double, double, double);
*/
static void Stats();

};
bool Graph::built = false;
int Graph::n = 0;
int Graph::m = 0;
vector Graph::index;
vector Graph::degree(MAX_NODE,0);
vector Graph::indegree(MAX_NODE,0);
vector Graph::outdegree(MAX_NODE,0);
vector Graph::edges;
vector Graph::correspond(MAX_EDGE,0);
int main()
{
time_t t;
srand((unsigned) time(&t));

bool directed = false;
int R = 100;
 Graph graph1;
 printf("abc");
  graph1.BuildFromFile2WC();//注释处执行进不去该方法
  printf("abc");

}

void Graph::BuildFromFile2WC()

{
if (built)
return;
built = true;
printf("aa\n");
char filename[100] = "E:/newcode2/networks/hep.txt";
FILE* in = fopen(filename, "r");
fscanf(in,"%ld %ld", &n, &m);

degree.resize(n);
indegree.resize(n);
outdegree.resize(n);
edges.resize(2*m);
correspond.resize(2*m);

for (int i=0; i<m; i++)
{
    //scanf("%ld %ld", &edges[i].u, &edges[i].v);
    fscanf(in,"%ld %ld", &edges[i].u, &edges[i].v);
            //inverse
            //int temp = 0;
            //temp = edges[i].u;
            //edges[i].u = edges[i].v;
            //edges[i].v = temp;

    //edges[i].u;
    //edges[i].v;
    edges[i].w1=0;
    edges[i].w2=0;
    edges[i+m].u = edges[i].v;
    edges[i+m].v = edges[i].u;
    edges[i+m].w1=0;
    edges[i+m].w2=0;
    edges[i].c   = 1;
    edges[i+m].c = 1;
    degree[edges[i].u]++;
    degree[edges[i].v]++;
    indegree[edges[i].v]++;
    indegree[edges[i].u]++;
    outdegree[edges[i].u]++;
    outdegree[edges[i].v]++;
    correspond[i] = i+m;
    correspond[i+m] = i;
}

qsort_edges(0, 2*m-1);
int newlocation[MAX_EDGE] = {0};
int m1 = 0;
for (int i=1; i<2*m; i++)
{
    if ((edges[i].u != edges[m1].u) || (edges[i].v != edges[m1].v))
    {
        m1++;
        edges[m1] = edges[i];
    }
    else
    {
        edges[m1].c++;
        if (edges[i].w1<edges[m1].w1) edges[m1].w1=edges[i].w1;
        edges[m1].w2=min(edges[m1].w2,edges[i].w2);
        //if (edges[i].u==141 && edges[i].v==0) printf("%d %lg %lg %lg\n",i,edges[m1].w2,edges[i].w2,min(edges[m1].w2,edges[i].w2));
    }
    newlocation[i] = m1;
}

for(int i=0; i<2*m; i++){
    correspond[newlocation[i]] = newlocation[correspond[i]];
}

if (m!=0)
    m = m1+1;

index.resize(n);
for (int i=0; i<n; i++)
    index[i] = 0;
for (int i=0; i<m; i++)
    index[edges[i].u] = i;
for (int i=1; i<n; i++)
    if (index[i] < index[i-1])
        index[i] = index[i-1];

for (int i=0;i<m;i++)
{
    //if (edges[i].w1==0)
        edges[i].w1=-log(1-pow(1-1.0/indegree[edges[i].v], edges[i].c));
    //if (edges[i].w2==0)
        edges[i].w2=-log(1-pow(1-1.0/indegree[edges[i].u], edges[i].c));
}

//add temp
FILE *out = fopen("directed.txt", "w");
for (int i=0; i<m; i++){
    //if(indegree[edges[i].v]==0)
        //continue;
    fprintf(out, "%d\t%d\t%f\n", edges[i].u, edges[i].v, 1.0/indegree[edges[i].v]);
}

fclose(out);

}
执行main时候,第一个abc能输出,第二个输出不了,中间那个graph1.BuildFromFile2WC()执行不了,到那就结束了,怎么解决啊,求大神指点

3个回答

what951006
what951006   Rxr 2017.09.06 19:10

这个的话,你贴的太长了,如果有必要,我可以远程帮你

zhang_guyuan
zhang_guyuan   2017.09.07 16:23

你直接说什么错误就好啊,贴这么多代码谁有时间帮你看》》》》

fzuim
fzuim   2017.09.08 09:06

同意楼上,什么错误就说

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
运用栈求解迷宫问题C/C++
用栈解决基本的迷宫问题C/C++ 1、问题描述:设置迷宫为m*n的二维数组,起点坐标为(1,1),中点坐标为(m,n),0为通路,1为死路,为防止数组越界将四周设置边界1,即数组变为(m+2)*(n+2)数组,迷宫如下....      迷宫 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1
利用循环链表实现约瑟夫问题的求解
【实验目的】 1.  熟悉C++语言的基本编程方法,掌握集成编译环境的调试方法; 2.  学习指针、模板类、异常处理的使用; 3.  掌握线性表的操作实现方法; 4.  培养使用线性表解决实际问题的能力。 【实验内容】       利用循环链表实现约瑟夫问题的求解。       约瑟夫问题如下:已知n个人(n>=1)围坐一圆桌周围,从1开始顺序编号。从序号为1的人开始报数,顺时针数到
第四章 习题
一、填空题(1)如类果类A继承了B,那么类A被称为  基  类,而类B被称为  派生  类。(2)C++的两种继承为: 单继承 和 多继承   。(3)在默认情况下的继承方式为 私有继承方式  。(4)从基类中公有派生一个类时,基类的公有成员就成为派生类的 公有  成员,而这个基类的保护成员就成为派生类的 保护成员。(5)C++提供了  多继承   机制,允许一个派生类可以继承多个基类,甚至这些基...
三峡在线新闻系统 V1.1
解决图片新闻的调用问题,参考演示程序pic.asp,解决首页js的调用问题,具体参考演示test.asp,解决了大类能够调用小类信息的问题
BFS算法之求单源最短路径
//BFS求两顶点最短距离问题 //总结:图的代码并不像链表,而更像是顺序表,其存储结构使用的是数组的方式。 int BFS_Mix_Distance(Graph G,int u,int i) //求u到i的路径长度 { int w; InitQueue(Q); visit(u); visited[u] = true; EnQueue(Q,u);
华为面试题:迷宫问题 C语言源码
定义一个二维数组N*M(其中2 int maze[5][5] = {         0, 1, 0, 0, 0,         0, 1, 0, 1, 0,         0, 0, 0, 0, 0,         0, 1, 1, 1, 0,         0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走
利用C语言解决实际问题
1. 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果 A选手说:B第一,我第三。 B选手说:我第二,E第四。 C选手说:我第一,D第二。 D选手说:C最后,我第三。 E选手说:我第四,A第一。 比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。 #include int main() { int a = 0; int b = 0; int c = 0;
Josephus问题的一个C语言程序
Josephus问题的一个C语言程序问题描述:n个人围坐一圈,从第一个人开始报数“1,2,3,4….m,数到m的人出局,然后下一个人从1开始继续,这样直到最后一个人为胜利者,输出胜利者是第几个人。函数功能:功能:josep函数,输入成员数n和停止数m,返回最后留下的人的编号。代码:以下代码在VS2012平台创建:#include<stdio.h> #include<stdlib.h> int jos
动态规划解决最长公共子序列LCS问题
子序列的定义:给定一个序列X=,另一个序列Z=,满足如下条件时称为X的子序列, 即存在一个严格递增的X的下标序列和所有的j=1,2,...,k,满足Zj=X[ik]下标序列,使得它们都相等。 如是X=的子序列。 给定两个序列X和Y,如果Z既是X的子序列,也是Y的子序列,我们称它是X和Y的公共子序列。 LCS问题:给定两个序列,求X和Y长度最长的公共子序列。 分析:LCS具有最优子结构性质
汉诺塔问题是使用递归解决问题的经典范例。
汉诺塔问题是使用递归解决问题的经典范例。   汉诺(Hanoi)塔问题:古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图)。有一个和尚想把这64个盘子从A座移到B座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座,要求打印移动的步骤。如果只有一个盘子,则不需要利用B座,直接将盘