Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ross

Problema na compilação/execução

Recommended Posts

Olá, estou tentando fazer um programa para o problema do caixeiro comprador exato (TPP ou PCCo) e, depois de fazer algumas pesquisas, eu encontrei o código a baixo e gostaria conseguir compilar e executar para comparar com a minha implementação. O problema é que não consigo compilar o código. Fica dando, esses erros(Também segue na foto):

"

/tmp/ccvk9cDb.o: Na função "work()":
main.cpp:(.text+0x104e): relocação truncada para caber: R_X86_64_PC32 contra símbolo não definido "pop" na seção .bss em /tmp/ccvk9cDb.o
main.cpp:(.text+0x106e): relocação truncada para caber: R_X86_64_PC32 contra símbolo não definido "pop" na seção .bss em /tmp/ccvk9cDb.o
main.cpp:(.text+0x1152): relocação truncada para caber: R_X86_64_PC32 contra símbolo não definido "pop" na seção .bss em /tmp/ccvk9cDb.o
main.cpp:(.text+0x12b4): relocação truncada para caber: R_X86_64_PC32 contra símbolo não definido "pop" na seção .bss em /tmp/ccvk9cDb.o
/tmp/ccvk9cDb.o: Na função "__static_initialization_and_destruction_0(int, int)":
main.cpp:(.text+0x1526): relocação truncada para caber: R_X86_64_PC32 contra ".bss"
main.cpp:(.text+0x1539): relocação truncada para caber: R_X86_64_PC32 contra ".bss"
collect2: error: ld returned 1 exit status
 

"

 

 

Esse é o código:

//////////////////////////////////////////////////////////////////////////////////////////////

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <string>
#include <stack>
#include <bitset>
#include"instance_access.h"
#define INF 0x3f3f3f3f
#define eps 1e-8
#define FI first
#define SE second
using namespace std;
typedef long long ll;

const int MaxM = 25, MaxK = 700;

int M, K, Q;

int G[MaxM + 5][MaxM + 5];

int P[MaxM + 5][MaxK + 5];

int C[MaxM + 5];


void read(char *p,int m,int k,int d,int h)
{
    //scanf("%d%d", &M, &K);
   int* _graph;
    int* _price;
    //_graph->printMatrix();
    //cout<<endl;
    //_price->printMatrix();
    //cout<<endl;
    get_instance_largek(_graph,_price,m,k,p);
    //cout<<endl;
    for(int i=0;i<m;++i)
    {
        for(int j=0;j<m;++j)
        {
            int temp=_graph[i*m+j];
            //cout<<temp<<" ";
            *(G + j)=temp;
        }
        //cout<<endl;
    }
    //cout<<endl;

    for(int i=0;i<m;++i)
    {
        for(int j=0;j<k;++j)
        {
            int temp=_price[i*k+j];
//            cout<<temp<<" ";
            *(P + j)=temp;
        }
//        cout<<endl;
    }
    M=m;
    K=k;
    Q=h;
    for(int i=1;i<m;++i)
    {
        C=d;
    }

}
inline void ck(int &x, int v) {
    if(x > v) x = v;
}

int head[MaxM + MaxK + 10];

struct Edge {
    int nxt, to, cow, cost;
    Edge() {}
    Edge(int nxt, int to, int cow, int cost) : nxt(nxt), to(to), cow(cow), cost(cost) {}
} ed[100000];
int ecnt, mx_flow, mi_cost;

void init() {
    mx_flow = mi_cost = ecnt = 0;
    memset(head, -1, sizeof(head));
}

void addedge(int u, int v, int cow, int cost) {
    ed[ecnt] = Edge(head, v, cow, cost);
    head = ecnt ++;
    ed[ecnt] = Edge(head[v], u, 0, -cost);
    head[v] = ecnt ++;
}

queue <int> q;

int dis[MaxK + MaxM + 10], pre[MaxK + MaxM + 10], inq[MaxK + MaxM + 10];

bool Spfa(int S, int T) {
    memset(dis, 0x3f, sizeof(dis));
    dis = 0;
    q.push(S);
    while(!q.empty()) {
        int u = q.front(); q.pop();
        inq = 0;
        for(int e = head; ~e; e = ed[e].nxt) {
            if(!ed[e].cow) continue;
            int v = ed[e].to;
            if(dis[v] > dis + ed[e].cost) {
                dis[v] = dis + ed[e].cost;
                pre[v] = e;
                if(!inq[v]) {
                    inq[v] = 1;
                    q.push(v);
                }
            }
        }
    }
    return dis[T] != INF;
}

void End(int S, int T) {
    int flow = INF;
    for(int u = T; u != S; u = ed[pre ^ 1].to) {
        flow = min(flow, ed[pre].cow);
    }
    for(int u = T; u != S; u = ed[pre ^ 1].to) {
        ed[pre].cow -= flow;
        ed[pre ^ 1].cow += flow;
        mi_cost += flow * ed[pre].cost;
    }
    mx_flow += flow;
}

int minPrice(int s) {
    init();
    int src = 0, dec = M + K+1;
    for(int i = 1; i < M; ++ i) {
        if(~s >> i & 1) continue;
        addedge(src, i, C, 0);
        for(int k = 0; k < K; ++ k) {
            if(P[k] == 0) continue;
            addedge(i, M + k+1, 1, P[k]);
        }
    }
    for(int i = 1; i <= K; ++ i) {
        addedge(M + i, dec, 1, 0);
    }
    while(Spfa(src, dec)) End(src, dec);
    if(mx_flow != K) return -1;
    return mi_cost;
}

int dp[MaxM + 1][1 << MaxM];

int pop[1 << MaxM];

void work() {

    int U = 1 << M;
    for(int i = 1; i < U; ++ i) {
        pop = pop[i >> 1] + (i & 1);
    }
    for(int i = 1; i < M; ++ i) {
        for(int j = 0; j < U; ++ j) {
            dp[j] = INF;
        }
    }
    for(int i = 1; i < M; ++ i) {
        dp[1 << i] = G[0];
    }
    for(int s = 1; s < U; ++ s) {
        if(pop >= Q) continue;
        for(int i = 1; i < M; ++ i) {
            if(dp == INF) continue;
            for(int j = 1; j < M; ++ j) {
                if(s >> j & 1) continue;
                ck(dp[j][s | (1 << j)], dp + G[j]);
            }
        }
    }
    int ans = INF;
    for(int i = 0; i < U; ++ i) {
        if(pop > Q) continue;
        int f = minPrice(i);
        if(f == -1) continue;
        for(int j = 1; j < M; ++ j) {
            if(dp[j] == INF) continue;
            ck(ans, f + dp[j] + G[j][0]);
        }
    }
    printf("%d", ans);
}

int main(int argc,char *argv[]) {
    //arguments order: filename m k u q
    if(argc !=6)
    {
        cout<<"wrong number of arguments";
        return 1;
    }
    int m,k,u,q;
    m=atoi(argv[2]);
    k=atoi(argv[3]);
    u=atoi(argv[4]);
    q=atoi(argv[5]);
    read(argv[1],m,k,u,q);
    time_t begin,end;
    cout<<"optimal object value: ";
    begin=clock();
    work();
    end=clock();
    cout<<endl;
    cout<<"time: ";
    cout<<double(end-begin)/CLOCKS_PER_SEC<<endl;
    return 0;
}

//////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////"instance_acess.h"//////////////////////////////////////////////////////////

#ifndef INSTANCE_ACCESS_H_INCLUDED
#define INSTANCE_ACCESS_H_INCLUDED

#include <string>
#include <strstream>
#include<iostream>
#include<fstream>
#include<string.h>
using namespace std;

int get_instance_largek(int *&graph, int *&product_distribution, int m,int k,char *p)
{
    graph=new int[m*m];
    product_distribution=new int[m*k];
    for(int i=0;i<m;++i)
    {
        for(int j=0;j<m;++j)
        {
            graph[i*m+j]=0;
        }
    }
    for(int i=0;i<m;++i)
    {
        for(int j=0;j<k;++j)
        {
            product_distribution[i*k+j]=0;
        }
    }
    ifstream fin;
    fin.open(p);
    if(fin.is_open())
    {
        string s;
        while(fin>>s)
        {
            if(s=="NODE_COORD_SECTION")
            {
                fin>>s;
                int num;
                double x[m];
                double y[m];
                for(int i=0;i<m;++i)
                {
                    fin>>num;
                    fin>>x;
                    fin>>y;
                }
                for(int i=0;i<m;i++)
                {
                    for(int j=0;j<m;j++)
                    {
                        double xd=x-x[j];
                        double yd=y-y[j];
                        int d=(int)(sqrt(xd*xd+yd*yd)+0.5);
                        graph[i*m+j]=d;
                    }
                }
            }
            if(s=="OFFER_SECTION")
            {
                fin>>s;
                int id;
                int num=0;
                for(int i=0;i<m;++i)
                {
                    fin>>id;
                    fin>>num;
                    int product_id;
                    int cost;
                    int dem;
                    for(int j=0;j<num;++j)
                    {
                        fin>>product_id;
                        fin>>cost;
                        product_distribution[i*k+product_id-1]=cost;
                        fin>>dem;
                    }
                }
            }
        }
        return 1;
    }else{
     return 0;
    }
}
#endif // INSTANCE_ACCESS_H_INCLUDED

//////////////////////////////////////////////////////////////////////////////////////////////

 

123w.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por josenilson
      Olá pessoal !
       
      Estou tentando rodar um projeto de um jogo na minha maquina porem o mesmo pede para adicionar o log4cxx 0.10.0, realizei pesquisas na internet a respeito mas até agora nada, Encontre para baixar nesse site https://logging.apache.org/log4cxx/1.0.0/download.html porem não sei se devo instalar ele no windows porque ao exportar ele no projeto as depêndencias que precisam dele ficam informando o erro log4cxx.logger.h no such file or directory. a linguagem que estou usando e C++
       
       
    • Por biza
      Ola
      Estou  a construir um datalogger em código C.Desta forma necessito passar os dados entre ficheiros. O meu problema está na inclusão de algumas variáveis no topo de um arquivo .txt onde os dados são salvos. Variáveis como tempo de data e hora, id do dispositivo e muito mais... Para isso preciso de ajuda, gostaria que os dados estivessem disponíveis para todos os arquivos, até aí é fácil, basta incluir a variável como extern, no arquivos *.h e incluí-lo em todos os outros que você deseja que a variável esteja disponível. mas como posso fazer para ter acesso a ele dentro do array que preciso?
      Exemplo: main.c
      #include "main.h" char dateTimeFormat[24]; void main(void){ dateTimeFormat = "22-02-22 13:23:04"; } main.h
      extern char dateTimeFormat[24];  
      teste.c
       
      #include "main.h" extern char dateTimeFormat[24]; /*Header .txt file initialization*/ volatile char headerFile[] ="\n\n" "# HEALT MONITORING SYSTEM \r\n" "# DEVELOPED: BIZA \r\n" "# VERSION: B \r\n" "# DATATIMECAPTURE:"+dateTimeFormat+ "\r\n" "# SAMPLINGFREQUENCY: 500 \r\n" "# SAMPLECHANNELS: 1 2 3 4 5 6 7 8 \r\n" "# SAMPLINGRESULUTION: 24 \r\n" "# IDDEVICE: HEALTHY \r\n" "# ENDOFHEADER  
      Como posso incluir a variável "dateTimeFormat" dentro do headerFile como descrevi acima?
       
    • Por oromotoceu
      #include <stdio.h>
      #include <stdlib.h>
      #define MAXTAM 1000
      int Frente, Tras, Lista[MAXTAM];
      void Lista_Construtor(){
      Frente=0;
      Tras=-1;
      }
      int Lista_Vazia(){
      if(Tras==-1)
      return 1;
      else
      return 0;
      }
      int Lista_Cheia(){
      if(Tras==MAXTAM-1)
      return 1;
      else
      return 0;
      }
      int Lista_Tamanho(){
      return Tras+1;
      }
      int Lista_Inserir_Inicio(int Valor){
      if(Lista_Cheia()){
      return 0;
      }else{
      /*se quero inserir na posição 0,
      vou deslocar todos os elementos para frente*/
      for(int i=Tras+1;i>Frente;i--){
      Lista=Lista[i-1];
      }
      Lista[Frente]=Valor;
      Tras++;
      return 1;
        }
      }
      int Lista_Inserir_Fim(int Valor){
      if(Lista_Cheia()){
      return 0;
      }else{
      Tras++;
      Lista[Tras]=Valor;
      return 1;
        }
      }
      int Lista_Inserir(int Valor, int Posicao){
      if(Lista_Cheia()){
      return 0;
      }else{
      /* Para verificar se a posição
      está no meio da lista */
      if(Posicao>Frente && Posicao<Tras){
      for(int i=Tras+1;i>Posicao;i--){
      Lista=Lista[i-1];
      }
      Lista[Posicao]=Valor;
      Tras++;
      return 1;
      }else{ 
      return 0;
         }
        }
      }
      int Lista_Remover_Inicio(int *Valor){
      if(Lista_Vazia()){
      return 0;
      }else{
      *Valor =Lista[Frente];
      for(int i=Frente;i<Tras;i++){
      Lista=Lista[i+1];
         }
      Tras--;
        }
      }
      int Lista_Remover_Fim(int *Valor){
      if(Lista_Vazia()){
      return 0;
      }else{
      *Valor=Lista[Tras];
      Tras--;
      return 1;
        }
      }
      int Lista_Remover(int *Valor, int Posicao){
      if(Lista_Vazia()){
      return 0;
      }else{
      if(Posicao>Frente && Posicao<Tras){
      *Valor=Lista[Posicao];
      for(int i=Posicao;i<Tras;i++){
      Lista=Lista[i+1];
      }
      Tras--;
      return 1;
         }
        }
      }
      int Lista_Get_toda(int *Valor){
      if(Lista_Vazia()){
      return 0;
      }else{
      *Valor=Lista[Frente];
      return 1;
        }
      }
      int Lista_Get_inicio(int *Valor){
      if(Lista_Vazia()){
      return 0;
      }else{
      *Valor=Lista[Frente];
      return 1;
        }
      }
      int Lista_Get_Fim(int *Valor){
      if(Lista_Vazia()){
      return 0;
      }else{
      *Valor=Lista[Tras];
      return 1;
        }
      }
      int Lista_Busca_Valor(int Valor, int *Posicao){
      int i;
      if(Lista_Vazia()){
      return 0;
      }else{
      for(i=Frente;i<Tras;i++){
      if(Lista==Valor){
      break;
        }
      }
      if(i==Tras){
      return 0;
      }else{
      *Posicao=i; 
      return 1;
         }
        }
      }
      int Lista_Busca_Posicao(int *Valor, int Posicao){
      if(Lista_Vazia()){
      return 0;
      }else{
      if(Posicao>Frente && Posicao<Tras){
      *Valor=Lista[Posicao];
      return 1;
      }else{
      return 0;
         }
        }
      }
      int main(){
      int i,Valor,op=0,pos;
      Lista_Construtor();
      while(op!=12){
      printf("*** Menu de opções ***\n");
      printf("1-Inserir início\n");
      printf("2-Inserir fim\n");
      printf("3-Inserir meio\n");
      printf("4-Excluir início\n");
      printf("5-Excluir fim\n");
      printf("6-Excluir meio\n");
      printf("7-Mostrar toda lista\n");
      printf("8-Mostrar primeiro item da lista\n");
      printf("9-Mostrar último item da lista\n");
      printf("10-Mostrar a posição de um item da lista\n");
      printf("11-Mostrar o valor de uma posição\n");
      printf("12-Sair\n");
      printf("Escolha uma opção: ");
      scanf("%d", &op);
      switch(op){
          case 1:
              printf("Digite o valor a ser inserido: ");
              scanf("%d", &Valor);
              Lista_Inserir_Inicio(Valor);
              break;
          case 2:
              printf("Digite o valor a ser inserido: ");
              scanf("%d", &Valor);
              Lista_Inserir_fim(Valor);
              break;
            case 3:
              printf("Digite o valor a ser inserido: ");
              scanf("%d", &Valor);
              printf("Digite a posição que deseja inserir: ");
              scanf("%d", &pos);
              Lista_ Inserir_meio(int Valor, pos); 
              break;
            case 4:
              printf("Digite a remoção do início: ");
              scanf("%d", &*Valor);
              Lista_ Excluir_inicio(*Valor); 
              break;
              case 5:
              printf("Digite a remoção do fim: ");
              scanf("%d", &*Valor);
              Lista_ Excluir_fim(*Valor); 
              break;
              case 6:
              printf("Digite a remoção do meio: ");
              scanf("%d", &Valor);
              printf("Digite a posição que deseja remover: ");
              scanf("%d", &*Posicao);
              Lista_ Excluir_meio(intValor, * pos); 
              break;
               case 7:
              printf("Digite ao a mostrar toda lista: ");
              scanf("%d", &Valor);
              Lista_ mostrar_toda_lista(Valor);
              break;
             case 8:
              printf("Digite ao a mostrar primeiro item da lista: ");
              scanf("%d", &*Valor);
              Lista_ mostrar_primeiro_item_da_lista(*Valor);
              break;
             case 9:
              printf("Digite ao a mostrar último item da lista: ");
              scanf("%d", &*Valor);
              Lista_ mostrar_ultimo_item_da_lista(*Valor);
              break;
              case 10:
              printf("Digite ao a mostrar a posição de um item da lista: ");
              scanf("%d", &Valor);
              printf("Digite a posição que deseja mostrar na lista: ");
              scanf("%d", &* pos);
              Lista_ mostrar_posicao_de_um_item_da_lista(intValor, *pos);
              break;
              case 11:
              printf("Digite ao a mostrar o valor de uma posição: ");
              scanf("%d", &*Valor
              printf("Digite a posição que deseja mostrar no valor: ");
              scanf("%d", &pos);
              Lista_ mostrar_posicao_de_um_valor_da_lista(int*Valor, pos);
              break;
              case 12:
              default:
              printf("Valor Invalido!\n");
              system("PAUSE");
               }
         }
       return 0;
      }
    • Por oromotoceu
      bom dia pode me ajudar nessa questão por favor
      O programa deverá trabalhar dados de um veículo, onde será armazenado, Nome do proprietário, placa do carro, modelo do carro e preço do carro.
      O programa deve ter as seguintes opções:
      Inserir dados (todos os dados sugeridos no enunciado acima).
      Excluir um Carro específico com a busca pela placa.
      Editar dados de um Carro com a busca pela placa.
      Consultar carro por Placa.
      Exibir todos os dados cadastrados.
      Finalizar programa.
      A opção exibir todos os dados, apresenta tudo que já foi cadastrado e está na memória.
       
    • Por TK_T
      olá sou iniciante consegui fazer um o código de um exercício só que quando eu peço o valor 12ab ele lê como numérica alguém pode me ajudar? 
      Exercício: Leia uma string e diga se a mesma é numérica (na base decimal) ou não.
      Ex.: "123" -> numérica
      "abc" -> não numérica
      "12ab" -> não numérica
      "12.34" -> numérica 
      #include <stdio.h> int main() { char Numero; printf("Digite Algo: "); scanf("%c", &Numero); if(Numero == '1' || Numero == '2' || Numero == '3' || Numero == '4' || Numero == '5' || Numero == '6' || Numero == '7' || Numero == '8' || Numero== '9' || Numero == '0') printf("\tNumérica...\n"); else printf("\tNão Numérica\n"); return 0; }  
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.