コード例 #1
0
ファイル: 90.cpp プロジェクト: SccsAtmtn/leetcode
 void dfsSearch(vector<int> &subset, vector<vector<int>> &ans, vector<pair<int, int>> &numbers, int curPtr) {
     if (curPtr==numbers.size()) {
         ans.push_back(subset);
         return;
     }
     dfsSearch(subset, ans, numbers, curPtr+1);
     for (int i=1; i<=numbers[curPtr].second; ++i) {
         subset.push_back(numbers[curPtr].first);
         dfsSearch(subset, ans, numbers, curPtr+1);
     }
     for (int i=0; i<numbers[curPtr].second; ++i)
         subset.pop_back();
 }
コード例 #2
0
ファイル: 10967125_WA.cpp プロジェクト: chyyuu/ACM
void ida(){

         //起始状态就是目标状态
         DEPTH = (hfunc()+2)/3;
         while(DEPTH < 5 && dfsSearch(1))DEPTH++;

		if(DEPTH == 5){
			printf("5 or more\n");
		}
		else{
			printf("%d\n",DEPTH);
		}
}
コード例 #3
0
ファイル: 90.cpp プロジェクト: SccsAtmtn/leetcode
 vector<vector<int>> subsetsWithDup(vector<int> &nums) {
     sort(nums.begin(), nums.end());
     vector<pair<int, int>> numbers;
     int start = 0;
     while (start<nums.size()) {
         int end = start+1;
         while (end<nums.size() && nums[end]==nums[start]) 
             ++end;
         numbers.push_back(make_pair(nums[start], end-start));
         start = end;
     }
     vector<vector<int>> ans;
     vector<int> subset;
     dfsSearch(subset, ans, numbers, 0);
     return ans;
 }
コード例 #4
0
ファイル: 10967125_WA.cpp プロジェクト: chyyuu/ACM
bool dfsSearch( int currDepth) {

	int x1,x2,x3,h;
	for(x1=0;x1<n-1;x1++){
		for(x2=x1;x2<n-1;x2++){
			for(x3=x2+1;x3<n;x3++){
				changeState(x1,x2,x3);
				h=hfunc();
				if(h==0)return false;
				else if(3*currDepth +  h <= 3*DEPTH){
					if(!dfsSearch(currDepth+1))return false;
				}
				changeState(x1,x1-x2+x3-1,x3);
			}
		}
	}

	return true ;
}