放的代码的顺序分别是.cpp,.h和.main,main是测试用的,cout<<"2"<<endl;都没办法正常输出,我怀疑是.cpp里什么地方有溢出,但是我找不着,求大佬解答
#include "Graph.h"
#include<bits/stdc++.h>
using namespace std;
int judvisit[99999];
Graph::Graph(int max_v){
max_v+=10;
E=(Grass*)malloc(sizeof(Grass)*max_v);
vv=max_v;
}
Graph::~Graph(){
free(E);
}
void Graph::addedge(int s, int t, int w){
++num;
E[num].u=s;
E[num].v=t;
E[num].w=w;;
}
int Graph::judge(int s,int p){
for(int i=1;i<=num;i++){
if((E[i].u==s&&E[i].v==p)||(E[i].u==p&&E[i].v==s)){
return E[i].w;
}
}
return 0;
}
int Graph::prim(){
int out=0;
for(int i=0;i<vv;i++){
int mid=-1;
int mini=999999;
judvisit[i]=1;
for(int j=i+1;j<vv;j++){
if(judvisit[i]==1&&judvisit[j]==1){
continue;
}
if(judvisit[j]==0&&judge(i,j)){
mini=min(judge(i,j),mini);
mid=j;
}
}
if(mid!=-1){
out+=mini;
judvisit[mid]=1;
}
}
return out;
}
int Graph::kruskal(){
int out=0;
int mid=-1;
int visit[num];
for(int i=1;i<=num;i++){
visit[i]=0;
}
for(int i=1;i<=num;i++){
int mini=999999;
for(int j=1;j<=i;j++){
if(i==j){break;}
else{
if(visit[i]==0&&E[i].v!=E[j].v){
mini=min(mini,E[i].w);
mid=i;
}
}
if(mid!=-1){
out+=mini;
}
}
}
return out;
}
#ifndef GRAPH_H
#define GRAPH_H
class Graph{
private:
struct Grass{
int u,v,w;
}*E;
int num;
int vv;
public:
/**
* 类的构造函数
@name Graph(int)
@param arg1 最大的定点数
@Return
*/
Graph(int max_v);
/**
* 类的析构函数
@name ~Graph()
@param
@return
*/
~Graph();
/**
* 向图中加入(s, t), 权重为w的双向边
@name addedge(int, int, int)
@param arg1 边的顶点1
@param arg2 边的顶点2
@param arg3 边的权重
@return void
*/
void addedge(int s, int t, int w);
/**
* 询问这张图的最小生成树(prim算法实现)
@name int prim()
@param
@return int 最小生成树的权值
*/
int prim();
/**
* 询问这张图的最小生成树(kruskal实现)
@name int kruskal()
@param
@return int 最小生成树的权值
*/
int kruskal();
int judge(int s,int p);
};
#endif
#include <iostream>
#include <cstdio>
#include "Graph.h"
using std::cin;
using std::cout;
using std::endl;
int main()
{
Graph g(5);
cout<<"1"<<endl;
g.addedge(1, 2, 10);
cout<<"2"<<endl;
g.addedge(1, 3, 10);
g.addedge(1, 4, 10);
g.addedge(1, 5, 10);
g.addedge(2, 3, 1);
if(g.prim() == 31) cout << "pass check point 1!" << endl;
if(g.kruskal() == 31) cout << "pass check point 2!" << endl;
return 0;
}
真的找不到,求大佬救救孩子,,应该就是.cpp出的错
#include "Graph.h"
#include<bits/stdc++.h>
using namespace std;
int judvisit[99999];
Graph::Graph(int max_v){
max_v+=10;
E=(Grass*)malloc(sizeof(Grass)*max_v);
vv=max_v;
}
Graph::~Graph(){
free(E);
}
void Graph::addedge(int s, int t, int w){
++num;
E[num].u=s;
E[num].v=t;
E[num].w=w;;
}
int Graph::judge(int s,int p){
for(int i=1;i<=num;i++){
if((E[i].u==s&&E[i].v==p)||(E[i].u==p&&E[i].v==s)){
return E[i].w;
}
}
return 0;
}
int Graph::prim(){
int out=0;
for(int i=0;i<vv;i++){
int mid=-1;
int mini=999999;
judvisit[i]=1;
for(int j=i+1;j<vv;j++){
if(judvisit[i]==1&&judvisit[j]==1){
continue;
}
if(judvisit[j]==0&&judge(i,j)){
mini=min(judge(i,j),mini);
mid=j;
}
}
if(mid!=-1){
out+=mini;
judvisit[mid]=1;
}
}
return out;
}
int Graph::kruskal(){
int out=0;
int mid=-1;
int visit[num];
for(int i=1;i<=num;i++){
visit[i]=0;
}
for(int i=1;i<=num;i++){
int mini=999999;
for(int j=1;j<=i;j++){
if(i==j){break;}
else{
if(visit[i]==0&&E[i].v!=E[j].v){
mini=min(mini,E[i].w);
mid=i;
}
}
if(mid!=-1){
out+=mini;
}
}
}
return out;
}
#ifndef GRAPH_H
#define GRAPH_H
class Graph{
private:
struct Grass{
int u,v,w;
}*E;
int num;
int vv;
public:
/**
* 类的构造函数
@name Graph(int)
@param arg1 最大的定点数
@Return
*/
Graph(int max_v);
/**
* 类的析构函数
@name ~Graph()
@param
@return
*/
~Graph();
/**
* 向图中加入(s, t), 权重为w的双向边
@name addedge(int, int, int)
@param arg1 边的顶点1
@param arg2 边的顶点2
@param arg3 边的权重
@return void
*/
void addedge(int s, int t, int w);
/**
* 询问这张图的最小生成树(prim算法实现)
@name int prim()
@param
@return int 最小生成树的权值
*/
int prim();
/**
* 询问这张图的最小生成树(kruskal实现)
@name int kruskal()
@param
@return int 最小生成树的权值
*/
int kruskal();
int judge(int s,int p);
};
#endif
#include <iostream>
#include <cstdio>
#include "Graph.h"
using std::cin;
using std::cout;
using std::endl;
int main()
{
Graph g(5);
cout<<"1"<<endl;
g.addedge(1, 2, 10);
cout<<"2"<<endl;
g.addedge(1, 3, 10);
g.addedge(1, 4, 10);
g.addedge(1, 5, 10);
g.addedge(2, 3, 1);
if(g.prim() == 31) cout << "pass check point 1!" << endl;
if(g.kruskal() == 31) cout << "pass check point 2!" << endl;
return 0;
}
真的找不到,求大佬救救孩子,,应该就是.cpp出的错