| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
1485题 Runtime error 用dev c++可以啊,请大家帮忙看一下,多谢!#include <iostream>
#include <cstring>
#include <string>
#include <vector>
#include <stdio.h>
#include <sstream>
#include "math.h"
using namespace std;
int count=0;
class MaxMin{
public:
int pos;
int max;
int min;
};
void Make2DArray(int * * &x,int rows,int cols){
x=new int*[rows];
for(int i=0;i<rows;i++)
x[i]=new int[cols];
}
void Delete2DArray(int * * x,int rows){
for(int i=0;i<rows;i++)
delete []x[i];
delete []x;
}
void Combine(int *num,int * flag,int ** &result,int n,int k,int bn,int t){
if(t==0){
int temp=0;
for(int i=0;i<n;i++){
if(flag[i]==1){
result[::count][temp]=num[i];
++temp;
if(temp==3){
break;
}
}
}
++(::count);
return;
}
if(bn>=n)
return;
flag[bn]=1;
Combine(num,flag,result,n,k,bn+1,t-1);
flag[bn]=0;
Combine(num,flag,result,n,k,bn+1,t);
}
int main(){
int n;
int k;
int ct=1;
vector<string> rt;
while((cin>>n)&&(cin>>k)){
vector<MaxMin> trt;
if((n==0)||(k==0))
break;
int dis=0;
int * num=new int[n+1];
int * flag=new int[n+1];
int total;
int index=0;
::count=0;
int temp1=n;
int temp2=k;
int rt1=1,rt2=1;
for(int i=0;i<k;i++){
rt1*=temp1;
rt2*=temp2;
--temp1;
--temp2;
}
total=rt1/rt2;
int **result;
Make2DArray(result,total,k);
for(int i=0;i<total;i++){
for(int j=0;j<k;j++)
result[i][j]=0;
}
for(int i=0;i<n;i++){
cin>>num[i];
flag[i]=0;
}
Combine(num,flag,result,n,k,0,k);
for(int i=0;i<total;i++){
int tempdis=0;
for(int j=0;j<n;j++){
int tdis=abs(num[j]-result[i][0]);
for(int w=1;w<k;w++){
int d=abs(num[j]-result[i][w]);
if(tdis>d)
tdis=d;
}
tempdis+=tdis;
}
if(i==0){
dis=tempdis;
}
else{
if(dis>tempdis){
dis=tempdis;
index=i;
}
}
}
for(int i=0;i<k;i++){
MaxMin mm;
mm.min=7;
mm.max=0;
trt.push_back(mm);
}
for(int i=0;i<n;i++){
int inx=0;
int td=abs(num[i]-result[index][0]);
for(int j=1;j<k;j++){
int ttd=abs(num[i]-result[index][j]);
if(td>ttd){
td=ttd;
inx=j;
}
}
if((i+1)<trt[inx].min){
trt[inx].min=i+1;
}
if((i+1)>trt[inx].max){
trt[inx].max=i+1;
}
}
for(int u=0;u<k;u++){
for(int v=0;v<n;v++){
if(num[v]==result[index][u]){
trt[u].pos=v+1;
}
}
}
stringstream ss;
Delete2DArray(result,total);
delete []num;
delete []flag;
num=0;
flag=0;
string str="Chain ";
ss<<ct;
str+=ss.str();
ss.str("");
str+="\n";
for(int i=0;i<k;i++){
str+="Depot ";
ss<<i+1;
str+=ss.str();
ss.str("");
str+=" at restaurant ";
ss<<trt[i].pos;
ss.str("");
str+=ss.str();
str+=" serves restaurants ";
if(trt[i].min!=trt[i].max){
ss<<trt[i].min;
str+=ss.str();
ss.str("");
str+=" to ";
ss<<trt[i].max;
str+=ss.str();
ss.str("");
str+="\n";
}
else{
ss<<trt[i].min;
str+=ss.str();
ss.str("");
str+="\n";
}
}
str+="Total distance sum = ";
ss<<dis;
str+=ss.str();
str+="\n";
ss.str("");
str+="\n";
rt.push_back(str);
++ct;
}
for(int i=0;i<rt.size();i++){
cout<<rt[i];
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator