Esempio n. 1
0
int *grayCode(int n, int *returnSize) {
    if (n < 0) {
        *returnSize = 0;
        return NULL;
    }
    if (n == 0) {
        *returnSize = 1;
        int *r = malloc(sizeof(int) * (*returnSize));
        r[0] = 0;
        return r;
    }
    int sz1;
    int *r1 = grayCode(n - 1, &sz1);
    *returnSize = 2 * sz1;
    int *r = malloc(sizeof(int) * (*returnSize));
    memcpy(r, r1, sizeof(int) * sz1);

    int i, bias = 1 << (n - 1);
    for (i = sz1; i != *returnSize; i++) {
        // reflect and add bias, That's why Gray code also named
        //      Reflected-Binary-Code
        r[i] = r[*returnSize - 1 - i] + bias;
    }
    free(r1);
    return r;
}
void SubSetTest::testGrayCode( void )
{
	vector<string> res = grayCode(3);
	for (int i = 0; i < res.size(); ++i)
	{
		cout<<res[i]<<" ";
	}
	cout<<endl;
}
Esempio n. 3
0
int main() {
    int rank = 5;
    int sz;
    int *r = grayCode(rank, &sz);
    int i, j;
    for (i = 0; i != sz; i++) {
        // show binary code
        for (j = rank - 1; j >= 0; j--) {
            printf("%d", r[i] & (1 << j) ? 1 : 0);
        }
        printf("\n");
    }
    return 0;
}
 vector<int> grayCode(int n) {
 	vector<int> v ; 
 	if(n == 0 ){
 		v.push_back(0);
 	}else if(n == 1) {
 		v.push_back(0); v.push_back(1);
 	}else{
 		vector<int> w = grayCode(n-1);
 		for(int i =0 ; i< w.size(); ++ i) 
 			v.push_back(w[i]) ;
 		for(int i = w.size()-1; i>=0 ; --i)
 			v.push_back( (1<<(n-1)) | w[i]);
 	}
 	return v;
 }
Esempio n. 5
0
	std::vector<int> grayCode(int n) {
		std::vector<int> gray_vec;
		if (n == 0) return std::vector<int>{0};
		if (n == 1) {
			gray_vec.push_back(0);
			gray_vec.push_back(1);
			return gray_vec;
		}
		auto sub_vec = grayCode(n - 1);
		gray_vec.insert(gray_vec.begin(), sub_vec.begin(), sub_vec.end());
		for (int i = sub_vec.size() - 1; i >= 0; i--){
			int shift_num = 1 << (n - 1);
			gray_vec.push_back(sub_vec[i] + shift_num);
		}
		return gray_vec;
	}
Esempio n. 6
0
 vector<int> grayCode(int n) {
     // Start typing your C/C++ solution below
     // DO NOT write int main() function
     vector<int> ret;
     if (n == 0) {
         ret.push_back(0);
     } else {
         ret = grayCode(n - 1);
         vector<int> nxt = ret;
         reverse(nxt.begin(), nxt.end());
         for (int i = 0; i < nxt.size(); ++i) {
             nxt[i] |= (1 << (n - 1));
         }
         ret.insert(ret.end(), nxt.begin(), nxt.end());
     }
     return ret;
 }
vector<string> SubSetTest::grayCode( int n )
{
	vector<string> code;
	code.resize(pow(2, n));

	if(n == 1){
		code[0] = "0";
		code[1] = "1";
		return code;
	}

	vector<string> last = grayCode(n - 1);
	for(int i = 0; i < last.size(); ++i){
		code[i] = "0" + last[i];
		code[code.size() - 1 - i] = last[i] + "1";
	}
	return code;
}
Esempio n. 8
0
vector<int> grayCode(int n)
{
	vector<int> tmp;
	if(n == 1)
	{
		tmp.push_back(0), tmp.push_back(1);
		return tmp;
	}
	else if(n == 0)
	{
	    tmp.push_back(0);
		return tmp;
	}
	tmp = grayCode(n-1);
	vector<int> ans = tmp;
	for(int i = tmp.size()-1; i >= 0; i--)
		ans.push_back(tmp[i] + (1 << (n-1)));
	return ans;
}
Esempio n. 9
0
 vector<int> grayCode(int n) {
     vector<int> res;
     if (n == 0) {
         res.push_back(0);
     } else if (n == 1) {
         res.push_back(0);
         res.push_back(1);
     } else if (n > 1) {
         vector<int> tmp = grayCode(n - 1);
         for (int i : tmp) {
             res.push_back(i);
         }
         tmp = reverseList(tmp);
         for (int i : tmp) {
             res.push_back(i | (1 << (n - 1)));
         }
     }
     return res;
 }
Esempio n. 10
0
 vector<int> grayCode(int n) {
     if (n == 0) {
         vector<int> result;
         result.push_back(0);
         return result;
     }
     if (n == 1) {
         vector<int> result;
         result.push_back(0);
         result.push_back(1);
         return result;
     }
     vector<int> ret = grayCode(n - 1), result(ret.size() * 2, 0);
     for (int i = 0; i < (int) ret.size(); i += 2) {
         result[2 * i] = ret[i] << 1;
         result[2 * i + 1] = (ret[i] << 1) + 1;
         result[2 * i + 2] = (ret[i + 1] << 1) + 1;
         result[2 * i + 3] = ret[i + 1] << 1;
     }
     return result;
 }
Esempio n. 11
0
std::vector<int> grayCode(int n)
{
  std::vector<int> graySeq;
  if(n == 0)
  {
    graySeq.push_back(0);
    return graySeq;
  }
  if(n == 1)
  {
    graySeq.push_back(0);
    graySeq.push_back(1);
    return graySeq;
  }
  graySeq = grayCode(n-1);
  int count = graySeq.size();
  int movedBit = n-1;
  for(int i=count-1; i>=0; i--)
  {
    graySeq.push_back(graySeq[i]+(1<<movedBit));
  }
  return graySeq;

}
Esempio n. 12
0
int main(void)
{
	int *res, n;
	res = grayCode(1, &n);
	return(0);
}
Esempio n. 13
0
int main(){
    grayCode(3);
    return 0;
}