Improving speed of word search algorithm I've been working on this word search algorithm and had some issues about its speed. It kinda looks like it takes a little too much time.

If anyone could offer suggestions on making this better and improving my skills, that would be great.

    #include &lt;iostream&gt;
    #include &lt;string&gt;
    #include &lt;fstream&gt;

    using namespace std;

    bool Check(string Letter, string Matrix)
    {
        return (Letter == Matrix) ? true : false;

    }

    int main()
    {
        int Height = 0, Widht = 0, Numb = 0, Longer = 0, Look = 0, Look1 = 0, Look2 = 0, Look3 = 0, Poz = 0, Poz1 = 0;

        int Loop = 0, Loop1 = 0, Loop2 = 0, Loop3 = 0, Loop4 = 0, Loop5 = 0, Loop6 = 0;

        bool Found, Found1, Found2, Found3;

        ifstream Data("Files/Info.txt");

        Data &gt;&gt; Widht &gt;&gt; Height;

        string Matrix[Height][Widht];

        while(Loop &lt; Height)
        {
            Loop1 = 0;

            while(Loop1 &lt; Widht)
            {
                Data &gt;&gt; Matrix[Loop][Loop1];

                Loop1++;
            }

            Loop++;
        }

        Data &gt;&gt; Numb;

        string Words[Numb];

        while(Loop2 &lt; Numb)
        {
            Data &gt;&gt; Words[Loop2];

            Loop2++;
        }

        Data.close();

        while(Loop3 &lt; Numb)
        {
            Longer = Words[Loop3].size();
            Loop4 = 0;
            Loop6 = 0;

            cout &lt;&lt; Words[Loop3] &lt;&lt; endl;

            while(Loop4 &lt; Height) // Looks horizantaly
            {
                Loop5 = 0;
                Look = 0;
                Look1 = 0;

                while(Loop5 &lt; Widht - Longer + 1)
                {
                    Found = Check(Words[Loop3].substr(Look, 1), Matrix[Loop4][Loop5]);

                    if(Found)
                    {
                        Loop6 = 1;
                        Look = Loop5;
                        Poz = Loop4;
                        Poz1 = Loop5;

                        while(Loop6 &lt; Longer)
                        {
                            Look++;

                            Found1 = Check(Words[Loop3].substr(Loop6, 1), Matrix[Loop4][Look]);

                            if(Found1)
                            {
                                Loop6++;
                            }
                            else
                            {
                                Loop5 += Loop6;
                                Loop6 = Longer + 1;
                            }
                        }
                    }

                    if(Loop6 == Longer)
                    {
                        cout &lt;&lt; "Word " &lt;&lt; Words[Loop3] &lt;&lt; " was found at: " &lt;&lt; Poz &lt;&lt; " collumn " &lt;&lt; Poz1 + 1 &lt;&lt; " symbol. Horizontaly from right to left" &lt;&lt; endl;
                        Loop5 = Widht;
                        Loop4 = Height;
                        Loop3++;
                    }

                    Loop5++;
                }

                Loop4++;
            }

            Loop3++;
        }

        return 0;
    }


The infos file looks like this:

10 10
a s d f g h j k l o
e t a k t r e e a d
t e d a w e f g d a
r e s a g a f a q w
d c s q a z x v n b
q w e t a s f w p s
w a r y i w t o o a
s b b d s s w q o k
w e r a d g d a p a
q w r c b a x l s k
3
tree
poop
test


Of course, I will later add other directions in which words might be written.
widht is misspelled; it should be width. :-)
Some generalities regarding naming convention:

Variables and functions should start with a lowercase letter:

// "camel case"
int camelCaseVariable;
void camelCaseFunction() {}




// "snake case"
int snake_case_variable;
void snake_case_function() {}


Custom types should start with a capital letter:

class Class;


Macros should be uppercase:

#define MACRO 0

Check()'s body can be simplified as such:

return Letter == Matrix; // already returns true or false


Its parameters should also be passed by constant reference since they're not being modified:

bool Check(string const&amp; Letter, string const&amp; Matrix) {}

You should make sure the input file is open before proceeding.  If not, terminate from main() by returning 1 or EXIT_FAILURE.
You could vastly improve readability by using more functions.  Putting everything in main() is not always a good idea, especially with a lot of nesting.  Define the functions to perform one important task, and call them in main() or wherever else as needed.  Function call overhead shouldn't hurt you here, making the readability aspect more important.

In its current state, more comments may help others follow the code.  That, in turn, could help flesh out any optimization issues.  However, this isn't a substitute for writing readable code.