Exemplo n.º 1
0
bool dfs()
{
    if(step+score>bound)
    {
        if(step+score<next)
            next=step+score;
        return false;
    }
    if(!score)
    {
        return true;
        path[step]=0;
    }
    for(int i=0;i<4;i++)
        if(path[step-1]!=dirt[rev[i]] && vaild(x+dx[i],y+dy[i]))
        {
            score-=num[s[x][y]][x][y];
            s[x+dx[i]][y+dy[i]]=s[x][y];
            s[x+=dx[i]][y+=dy[i]]=0;
            score+=num[s[x][y]][x][y];
            path[step++]=dirt[i];
            if(dfs())
                return true;
            step--;
            score-=num[s[x][y]][x][y];
            s[x-dx[i]][y-dy[i]]=s[x][y];
            s[x-=dx[i]][y-=dy[i]]=0;
            score+=num[s[x][y]][x][y];
        }
    return false;
}
Exemplo n.º 2
0
	void solveNQueens(const int n, vector<int> & steps, vector<vector<string> > & res)
	{
		if (steps.size() == n)
		{
			vector<string> v;
			for (int i = 0; i < n; i++)
			{
				string tmp(n, '.');
				tmp[steps[i]] = 'Q';
				v.push_back(tmp);
			}
			res.push_back(v);
			return;
		}
		else
		{
			int row = steps.size();
			for (int i = 0; i < n; i++)
			{
				//每走一步,都要看下当前step是否vaild
				if (vaild(row, i, steps))
				{
					//对当前row的每个col进行遍历
					steps.push_back(i);
					solveNQueens(n, steps, res);
					steps.pop_back();
				}
			}
		}
	}
    vector<string> restoreIpAddresses(string s) {
        vector<string> res;
        int len = s.size();
        if(len < 4 && len > 12) return res;
        int point = 1;
        int cur = 1;
        for(int i = 0; i < 5; i++)dot.push_back(0);
        while(point < 4){
            while(cur < len){
                if(vaild(cur,point,len,s)){
                    dot[point] = cur;
                    cur ++;
                    break;
                }
                else{
                    if(cur - dot[point-1] > 3){
                       //point --;
                       //cur = dot[point] + 1;
                       break;
                    }
                    else cur ++;
                }
            }
            if(dot[point] == 0){
                if(point == 1) break;
                else{
                    point --;
                    cur = dot[point] + 1;
					dot[point] = 0;
                    continue;
                }
            }
            if(point == 3 && dot[point] != 0){
                point = 1;
                string temp;
                for(int i = 0;i < len;){
                    if(dot[point] == i){
                        temp += "."; 
						point ++;
                    }
                    else{
                        temp += s[i];
                        i++;
                    }
                }
				point --;
                res.push_back(temp);
                cur = dot[point] + 1;
                dot[point] = 0;
                //point --;
                continue;
            }
            point ++;
        }
        return res;
    }
Exemplo n.º 4
0
inline int read(){int ret=0;char c=gc();while(vaild(c))ret=ret*10+c-'0',c=getchar();return ret;}
Exemplo n.º 5
0
inline char gc(){char c=getchar();while(!vaild(c))c=getchar();return c;}