leetcode 1066 要啥自行车

阻击回溯法 

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int MinDistance = 99999999;
typedef struct node {
	int x;
	int y;
}node;

int getManhattan(node left, node right) {
	return abs(left.x - right.x) + abs(left.y - right.y);
}
vectorworkers;
vectorbikes;
vectorvisited;
void process(int currentWorker,int sumDisstance) {
	if (sumDisstance >= MinDistance)
		return;
	if (currentWorker == workers.size()) {
		MinDistance = sumDisstance;
		return;
	}
	else {
		for (int i = 0; i < bikes.size(); i++) {
			if (!visited[i]) {
				visited[i] = true;
				process(currentWorker + 1, 
                           sumDisstance +getManhattan(workers[currentWorker], bikes[i]));
				//还原
				visited[i] = false;
			}
		}
	}
}
//初始化
void init(){
	workers.push_back(node{ 0,0 });
	workers.push_back(node{ 1,1 });
	workers.push_back(node{ 2,0 });
	bikes.push_back(node{ 1,0 });
	bikes.push_back(node{ 2,2 });
	bikes.push_back(node{ 2,1 });
	visited.resize(bikes.size());
	for (int i = 0; i < bikes.size(); i++)
		visited[i] = false;
}

int main() {
    init();
	process(0, 0);
	printf("MinDistance: %d",MinDistance);
	system("pause");
	return 0;
}

 

你可能感兴趣的:(leetcode)