示例#1
0
文件: 1227.cpp 项目: icyrhyme/zoj
void search() {
    if(!vis[v[0]][v[1]][v[2]][v[3]]) {
        vis[v[0]][v[1]][v[2]][v[3]] = true;
        maxans = max(maxans, ans);
        if(s.size() == 5)
            return;
        for(int i = 0; i < 4; ++i) {
            if(v[i] < n) {
                if(!s.find(bd[v[i]][i])) {
                    s.insert(bd[v[i]][i]);
                }
                else {
                    s.erase(bd[v[i]][i]);
                    ++ans;
                }
                ++v[i];
                search();
                --v[i];
                if(!s.find(bd[v[i]][i])) {
                    s.insert(bd[v[i]][i]);
                    --ans;
                }
                else {
                    s.erase(bd[v[i]][i]);
                }
            }
        }
    }
}
//the case if encounter a angle bracket "["
void MDparser::angleBracket(std::string& tobeStored, bool& readyToStore, std::ifstream& myinput, myset<std::string>& allWords, myset<std::string>& allLinks){
	string buffer("");

    char letter=(char)myinput.get();
    while(letter!=']'&& !myinput.fail()){
      buffer=buffer+letter;
      letter=(char)myinput.get();
   }
   buffer+="]";
   //parsing,change bool varibale to false
   for (int i=0;i<(int)buffer.size();i++){
   		letter=buffer[i];
   		if(isLetter(letter)){
   			readyToStore=true;
   			tobeStored+=letter;
   		}
   		else if(!isLetter(letter)&&readyToStore){
   			allWords.insert(tobeStored);
   			tobeStored="";
   			readyToStore=false;
   		}
   		else if(!isLetter(letter)&&!readyToStore){
   			//donothing
   		}
   }

   if(!myinput.fail()){
   	   letter=(char)myinput.get(); //get the next letter after']'
		if(letter=='('){
			buffer="";
			letter=(char)myinput.get();
			while(letter!=')'){
				buffer+=letter;
				letter=(char)myinput.get();
			}
			ifstream my_input(buffer.c_str());
			if(!my_input.fail()){
				allLinks.insert(buffer);				
			}
			my_input.close();
			buffer="";
			readyToStore=false;
		}
		else{
			if(isLetter(letter)){
				readyToStore=true;
				tobeStored+=letter;
			}
			else{
				readyToStore=false;
			}
		}
   }
}
void MDparser::parse(std::string filename, myset<std::string>& allWords, myset<std::string>& allLinks){
	ifstream myinput(filename.c_str());
	string tobeStored("");
	char nextCharacter;
	bool readyToStore=false;
	while(true){
		nextCharacter=(char)myinput.get();
		if(myinput.fail()){
			if(readyToStore){
				allWords.insert(tobeStored);
			}
			myinput.close();
			return;
		}
		//case when the next character is open parathesis
		if(nextCharacter=='['){
			if(readyToStore){
				allWords.insert(tobeStored);
				readyToStore=false;
				tobeStored="";
			}
			angleBracket(tobeStored,readyToStore, myinput, allWords, allLinks);

		}
		else if(isLetter(nextCharacter)){
			readyToStore=true;
			tobeStored+=nextCharacter;

		}
		else if(readyToStore&&!isLetter(nextCharacter)){
			allWords.insert(tobeStored);
			readyToStore=false;
			tobeStored="";
		}

	}
}