标题:process exited after 30 seconds with return value 255是什么问题
只看楼主
啦啦123
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2019-5-12
结帖率:0
 问题点数:0 回复次数:1 
process exited after 30 seconds with return value 255是什么问题
在较小一点的数据集,也就是最大MAXN=6300还可以运行,但换个大一点的数据集就不行了,出现这个错误
程序代码:
#include<iostream>                                                                                                        

#include<queue>

#include <algorithm>
#include <string.h>
#include <fstream>                                                                                                            


 using namespace std;                                                                                                      


 const int MAXN=8300;// 最大点数                                                                                            


 const int INF=1<<28;// 距离初始值                                                                                         


 int bmap[MAXN][MAXN];//二分图                                                                                             

                                                                                                                           


 int cx[MAXN];//cx[i]表示左集合i顶点所匹配的右集合的顶点序号                                                               


 int cy[MAXN]; //cy[i]表示右集合i顶点所匹配的左集合的顶点序号                                                              




 int G_1[MAXN],G_2[MAXN];


 //三处文件名需要修改,一处最大点值需要修改                                                                                                                          


 int nx,ny;                                                                                                                


 int dx[MAXN];                                                                                                             


 int dy[MAXN];                                                                                                             


 int dis;                                                                                                                  


 bool bmask[MAXN];                                                                                                         


 //寻找 增广路径集                                                                                                         



extern   int getInputData(const char *fileName, int rowNum, int colNum, int *X, int *Y);
extern   int getFileRows(const char *fileName);
extern   int getFileColumns(const char * fileName);



 bool searchpath()                                                                                                         


 {                                                                                                                         

    queue<int>Q;                                                                                                           

    dis=INF;                                                                                                               

    memset(dx,-1,sizeof(dx));                                                                                              

    memset(dy,-1,sizeof(dy));                                                                                              

    for(int i=1;i<=nx;i++)                                                                                                 

    {                                                                                                                      

       //cx[i]表示左集合i顶点所匹配的右集合的顶点序号                                                                      

       if(cx[i]==-1)                                                                                                       

       {                                                                                                                   

          //将未遍历的节点 入队 并初始化次节点距离为0                                                                      

          Q.push(i);                                                                                                       

          dx[i]=0;                                                                                                         

       }                                                                                                                   

    }                                                                                                                      

    //广度搜索增广路径                                                                                                     

    while(!Q.empty())                                                                                                      

    {                                                                                                                      

       int u=Q.front();                                                                                                    

       Q.pop();                                                                                                            

       if(dx[u]>dis) break;                                                                                                

       //取右侧节点                                                                                                        

       for(int v=1;v<=ny;v++)                                                                                              

       {                                                                                                                   

          //右侧节点的增广路径的距离                                                                                       

          if(bmap[u][v]&&dy[v]==-1)                                                                                        

          {                                                                                                                

             dy[v]=dx[u]+1; //v对应的距离 为u对应距离加1                                                                   

             if(cy[v]==-1) dis=dy[v];                                                                                      

             else                                                                                                          

             {                                                                                                             

                dx[cy[v]]=dy[v]+1;                                                                                         

                Q.push(cy[v]);                                                                                             

             }                                                                                                             

          }                                                                                                                

       }                                                                                                                   

    }                                                                                                                      

    return dis!=INF;                                                                                                       


 }                                                                                                                         

                                                                                                                           


 //寻找路径 深度搜索                                                                                                       


 int findpath(int u)                                                                                                       


 {                                                                                                                         

    for(int v=1;v<=ny;v++)                                                                                                 

    {                                                                                                                      

       //如果该点没有被遍历过 并且距离为上一节点+1                                                                         

       if(!bmask[v]&&bmap[u][v]&&dy[v]==dx[u]+1)                                                                           

       {                                                                                                                   

          //对该点染色                                                                                                     

          bmask[v]=1;                                                                                                      

          if(cy[v]!=-1&&dy[v]==dis)                                                                                        

          {                                                                                                                

             continue;                                                                                                     

          }                                                                                                                

          if(cy[v]==-1||findpath(cy[v]))                                                                                   

          {                                                                                                                

             cy[v]=u;cx[u]=v;                                                                                              

             return 1;                                                                                                     

          }                                                                                                                

       }                                                                                                                   

    }                                                                                                                      

    return 0;                                                                                                              


 }                                                                                                                         

                                                                                                                           


 //得到最大匹配的数目                                                                                                      


 int MaxMatch()                                                                                                            


 {                                                                                                                         

    int res=0;                                                                                                             

    memset(cx,-1,sizeof(cx));                                                                                              

    memset(cy,-1,sizeof(cy));                                                                                              

    while(searchpath())                                                                                                    

    {                                                                                                                      

       memset(bmask,0,sizeof(bmask));                                                                                      

       for(int i=1;i<=nx;i++)                                                                                              

       {                                                                                                                   

          if(cx[i]==-1)                                                                                                    

          {                                                                                                                

             res+=findpath(i);                                                                                             

          }                                                                                                                

       }                                                                                                                   

    }                                                                                                                      

    return res;                                                                                                            


 }                                                                                                                         

                                                                                                                           

                                                                                                                           


 int main()                                                                                                                


 {                                                                                                                         

    int num,num1;
    int r_num,c_num,success;                                                                                                               

    scanf("%d",&num);

    num1=num;                                                                                                     

    //while(num--)                                                                                                           

   //{                                                                                                                      

                                                                                                                           

       memset(bmap,0,sizeof(bmap));

       memset(G_1,0,sizeof(G_1));

       memset(G_2,0,sizeof(G_2));                                                                                          

       scanf("%d%d",&nx,&ny);                                                                                              

       /*for(int i=1;i<=nx;i++)                                                                                              

       {                                                                                                                   

          int snum;                                                                                                        

          scanf("%d",&snum);                                                                                               

          int u;                                                                                                           

          for(int j=1;j<=snum;j++)                                                                                         

          {                                                                                                                

             scanf("%d",&u);                                                                                               

             bmap[i][u]=1;                                                                                                 

            // bmap[u][i]=1;                                                                                               

          }                                                                                                                

       }  */                                                                                                                 

      // cout<<MaxMatch()<<endl;

       r_num=getFileRows("Wiki-Vote.txt");
       c_num=getFileColumns("Wiki-Vote.txt");                                                                                                             

       success=getInputData("Wiki-Vote.txt",r_num,c_num,G_2,G_1);
       //cout<<r_num<<" "<<c_num<<" "<<G_1[1]<<" "<<G_2[1]<<endl;
       for (int i=0;i<=r_num;i++)
       {
           bmap[G_1[i]][G_2[i]]=1;
       }                                                                                          

       if(MaxMatch()==nx)                                                                                                  

       {                                                                                                                   

          printf("YES\n");                                                                                                 

       }                                                                                                                   

       else                                                                                                                

       {                                                                                                                   

          printf("NO\n");                                                                                                  

       }

      

       cout<<"最大匹配数是:"<<MaxMatch()<<endl;                                                                           

     // cout<<"对应的匹配关系是:"<<endl;                                                                                    

     // for(int i=1;i<=nx;i++)                                                                                               

     // {                                                                                                                    

      //   cout<<i<<" "<<cx[i]<<endl;                                                                                     

     // } 

      cout<<"控制节点个数:"<<num1-MaxMatch()<<endl;                                                                                                                  

     // cout<<"!!!!!!!!!!!!!!"<<endl;                                                                                        

      //for(int i=1;i<=ny;i++)                                                                                               

      //{                                                                                                                    

      //   cout<<cy[i]<<" "<<i<<endl;                                                                                    

     // }                                                                                                                   

   //}                                                                                                                      

    //system("pause");                                                                                                     

    return 0;                                                                                                              


 }                                                                                                                         




 int getInputData(const char *fileName, int rowNum, int colNum, int *X, int *Y)
{
    ifstream fileStream;
    string oneLine = "";    //输入文件的某一行
    double tmp = 0;        //当前位置上的数值
    int rowCount;    // 行数计数器
    int colCount =0;    // 列数计数器
    int index =0;        // 当前位置在X[]数组的下标
    int maxIndex = rowNum * (colNum -1) - 1;


    // 打开文件
    fileStream.open(fileName,ios::in);    //ios::in 表示以只读的方式读取文件
    if(fileStream.fail())//文件打开失败:返回0
    {
        cout << "文件不存在." << endl;
        fileStream.close();
        system("pause");
        return 0;
    }
    else//文件存在
    {
        // 读入数据
        rowCount =0;    //初始化当前行数为0
        colCount = 0;    //当前列数清零
        double tmp = 0;    //当前读入的数值
        while (!fileStream.eof()){                       

            fileStream >> tmp;
       

            if (colCount == 0){    //第一列,是标签Y
                if (rowCount < rowNum){        //越界检查
                    Y[rowCount] = tmp;
                    //cout << Y[rowCount] << endl;
                }
                else{
                    cout << "计算出的行数与输入数据不符,请检查数据(如文件末尾不能有空行)." << endl;
                    fileStream.close();
                    system("pause");
                    return 0;
                }
            }
            else{                //非第一列,是数据X
                index = rowCount * (colNum -1) + colCount -1;
                if  (index <= maxIndex){        //越界检查
                    X[index] = tmp;
                    //cout << X[index] << endl;
                }
                else{
                    cout << "X[]下标超出数组范围,可能是文件中某行的列数>第一行的列数,退出!" << endl;
                    fileStream.close();
                    system("pause");
                    return 0;
                }               

            }
            if ('\n' != fileStream.peek()){    // 未到行尾,colCount累加,rowCount不变
               

                ++colCount;

                   

            }
            else{    //已到行尾,colCount清零,rowCount累加               

                if ((colCount + 1) != colNum)        //越界检查
                {
                    cout << "" << rowCount + 1 <<"行,输入的列数与文件列数不一致,请检查数据." << endl;
                    fileStream.close();
                    system("pause");
                    return 0;
                }
                else{
                    rowCount++;    // 换下一行
                    colCount = 0;    // 列数清零               

                }
            }                       

        }
                       

        // 关闭文件
        fileStream.close();
        return 1 ;
    }
}// END OF getInputData
//文本的行数

int getFileRows(const char *fileName)
{
    ifstream fileStream;
    string tmp;
    int count = 0;// 行数计数器
    fileStream.open(fileName,ios::in);//ios::in 表示以只读的方式读取文件
    if(fileStream.fail())//文件打开失败:返回0
    {
        return 0;
    }
    else//文件存在
    {
    while(getline(fileStream,tmp,'\n'))//读取一行
   {
       if (tmp.size() > 0 )
       count++;
    }
    fileStream.close();
     return count ;
   }
}
//文本的列数

  int getFileColumns(const char * fileName)
  {
    ifstream fileStream ;
   // fileStream.open(fileName,std::ios::_Nocreate);
    fileStream.open(fileName,ios::in);
    double tmp = 0;
    int count = 0;    // 列数计数器   

    char c;            //当前位置的字符
    c = fileStream.peek();
    while (('\n' != c) && (! fileStream.eof()))    // 指针指向的当前字符,仅观测,不移动指针位置
    { 

        fileStream >> tmp; 

        ++count; 

        c = fileStream.peek();
    } 

   

    fileStream.close();
    return count;
}


搜索更多相关主题的帖子: return int 文件 cout tmp 
2019-05-12 18:50
啦啦123
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2019-5-12
得分:0 
回复 楼主 啦啦123
Wiki-Vote.rar (260.85 KB)

这个是出问题的数据集
2019-05-12 18:56



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-494698-1-1.html




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

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